存储大量JSON数据的最佳方式。 MS SQL? Raven DB?

时间:2015-09-22 10:15:37

标签: c# sql-server json linq ravendb

我们从webapi获取数据,我们需要将数据存储在我们的服务器上。数据有一些主要的对象类型:房屋,住房合作社和山寨信息。以下是两个回复的简短代码段:

House:
 {   "advertiseOn": {
        "homepage": true,
        "showAsComming": true,
        "showTodaysHousing": true,
        "showAsReferenceHousing": true,
        "imageIds": [
          "sample string 1",
          "sample string 2"
        ],
        "documents": [
          {
            "name": "sample string 1",
            "id": "sample string 2",
            "extension": "sample string 3",
            "url": "sample string 4"
          },
          {
            "name": "sample string 1",
            "id": "sample string 2",
            "extension": "sample string 3",
            "url": "sample string 4"
          }
        ],

Housing cooperative
{
  "advertiseOn": {
    "homepage": true,
    "showAsComming": true,
    "showTodaysHousing": true,
    "showAsReferenceHousing": true,
    "imageIds": [
      "sample string 1",
      "sample string 2"
    ],
    "documents": [
      {
        "name": "sample string 1",
        "id": "sample string 2",
        "extension": "sample string 3",
        "url": "sample string 4"
      },
      {
        "name": "sample string 1",
        "id": "sample string 2",
        "extension": "sample string 3",
        "url": "sample string 4"
      }
    ],

在上面的片段中,住宅和住房合作社的数据是相同的,但他们的数据不同。

如果他们拥有相同的数据就不会有问题,只需将它们映射到与每个对象有关系的Object表。例如,广告。

由于每个主要对象有大约20-25个不同的对象,这将导致75个不同的数据库表,它只是感觉不是解决此问题的最佳方法。存储此数据的最简单方法是什么?我们需要能够使用不同的参数搜索数据。例如,EstateId。

有任何想法或建议吗? // H

2 个答案:

答案 0 :(得分:1)

根据您的指定,似乎任何文档数据库都符合要求,特别是那些本地存储Json的文档。 (很好的例子是RavenDBMongoDB - 具有存储Json的动态模式的文档数据库)
选择NoSQL数据库主要是关于你的问题,如下问题:

  • 您打算如何访问数据?查询?一般的数据访问模式 - 您需要聚合吗?报告?或简单查询?
  • 对可靠性,一致性和高可用性的要求 - 数据库是否提供了所需的所有功能和可靠性保证?

此外,imho选择正确的数据库更容易之后决定您想要如何建模数据。 This blog post可以为NoSQL数据库中的数据建模提供出色的介绍。

答案 1 :(得分:1)

Michael是对的,您需要了解如何访问数据,然后了解不同数据库的限制。 您可以在MongoDb中存储JSON并创建针对JSON文档优化的索引,但是如果您需要在房屋和住房合作社之间进行某种连接,则需要创建map / reduce函数,因为集合之间没有连接。我认为MongoDb仍然区分大小写,所以你不能使用排序规则。

如果您已经在使用MS SQL,您甚至可以将JSON存储为文本。在Sql Server 2016中,CTP3将提供用于解析和查询JSON文本的内置函数,请参阅JSON in Sql Server 2016 post。如果您将使用某些旧版本的Sql Server,您可以使用一些现有的CLR / JSON库,例如Sql4JsonJsonSelect,或使用Json.Net构建您自己的库

没有绝对最好的方法来解决此问题,您需要分析哪个平台可以适合您的用例。