【问题标题】:Best way to store large amount of JSON data. MS SQL? Raven DB?存储大量 JSON 数据的最佳方式。 MYSQL?拉文德?
【发布时间】:2015-09-22 10:15:37
【问题描述】:

我们从 webapi 获取数据,我们需要将数据存储在我们的服务器上。数据有一些主要的对象类型:房屋、房屋合作社和别墅信息。这是来自两个响应的简短代码 sn-p:

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"
      }
    ],

在上面的sn-p中,房屋和房屋合作社的数据相同,但它们的数据不同。

如果他们拥有相同的数据,那么只需将它们都映射到与每个对象都有关系的对象表中就不会成为问题。以 AdvertiseOn 为例。

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

有什么想法或建议吗? // H

【问题讨论】:

  • 您如何定义“最佳方式”?最快的方法?最有活力的方式?最安全的方式?
  • 真的有什么办法,因为我不知道如何存储数据。我真的很想避免在 mssql 中创建 75 个表
  • 数据库上的事务应该是ACID(原子性、一致性、隔离性、持久性),还是没关系。有时,根据问题的上下文(创建 75 个表来存储数据),努力工作是正确的选择

标签: c# sql-server json linq ravendb


【解决方案1】:

根据您指定的内容,似乎任何文档数据库都可以满足要求,尤其是那些原生存储 Json 的数据库。 (很好的例子是 RavenDBMongoDB - 具有存储 Json 的动态模式的文档数据库)
选择 NoSQL 数据库主要是关于您的问题,例如以下问题:

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

此外,恕我直言,选择正确的数据库会更容易您决定要如何对数据建模之后。 This blog post 可以很好地介绍 NoSQL 数据库中的数据建模。

【讨论】:

    【解决方案2】:

    Michael 是对的,您需要了解如何访问数据,然后了解不同数据库的限制。 您可以将 JSON 存储在 MongoDb 中并创建针对 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 构建自己的库

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

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 2017-09-23
      • 2012-01-15
      • 1970-01-01
      • 2023-04-08
      • 2012-10-18
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多