c# - 如何存储数十亿个 JSON 文件并进行查询

标签 c# java c++ python sql

我目前有一个 API,它接受 JSON 文件(这是包含一些用户交易数据的 JSON 序列化对象)并将其存储到服务器中。每个这样的 JSON 文件都有一个唯一的全局 ID 和一个与之关联的唯一用户。每天都会生成数十亿个此类文件。然后,用户应该能够查询与其关联的所有 JSON 文件,并生成一组基于这些文件计算的聚合结果。

需要存储的典型 JSON 文件类似于:

[ { "currencyCode" : "INR",
"receiptNumber" : { "value" : "1E466GDX5X2C" },
"retailTransaction" : [ { "grandTotal" : 90000.0,
      "lineItem" : [ { "otherAttributes" : {  },
            "sale" : { "description" : "Samsung galaxy S3",
                "discountAmount" : { "currency" : "INR",
                    "value" : 2500
                  },
                "itemSubType" : "SmartPhone",
                "otherAttributes" : {  },
                "unitCostPrice" : { "quantity" : 1,
                    "value" : 35000
                  }
              },
            "sequenceNumber" : 1000
          },
          { "customerOrderForPickup" : { "description" : "iPhone5",
                "discountAmount" : { "currency" : "INR",
                    "value" : 5000
                  },
                "itemSubType" : "SmartPhone",
                "otherAttributes" : {  },
                "unitCostPrice" : { "quantity" : 1,
                    "value" : 55000
                  }
              },
            "otherAttributes" : {  },
            "sequenceNumber" : 1000
          }
        ],
      "otherAttributes" : {  },
      "reason" : "Delivery",
      "total" : [ { "otherAttributes" : {  },
            "type" : "TransactionGrossAmount",
            "value" : 35000
          } ]
    },
    null
  ],
"sequenceNumber" : 125435,
"vatRegistrationNumber" : "10868758650"
} ]

上面的 JSON 是一个复杂对象的序列化版本,它包含一个或多个其他类的对象作为属性。所以 'receiptNumber' 是 JSON 文件的通用 ID。

我需要查询诸如 customerOrderForPickup 的数量和值(value)或交易的 grandTotal 之类的东西,并作为各种此类交易 JSON 的聚合 **

我想就如何进行提出一些建议:1) 将这些 JSON 文件存储在服务器上,即文件系统 2) 我应该使用什么样的数据库来查询这些 JSON 文件复杂结构

我的研究得出了几种可能性:1) 使用 MongoDB 数据库存储对象的 JSON 代表并通过数据库进行查询。 JSON 文件将如何存储?在 MongoDB 数据库中存储事务 JSON 的最佳方式是什么? 2) 将包含唯一全局 ID、用户 ID 和服务器上 JSON 文件地址的 SQL 数据库与这些文件的聚合代码结合起来。我怀疑这是否可以扩展

如果有人对这个问题有任何见解,我们会很高兴。谢谢。

最佳答案

我会说你的问题很笼统,确实是风格和偏好的问题。你可以用 10 种不同的方式来做到这一点,每一种都非常好。

我将给出我的个人偏好以及我将如何做:

由于有很多数据,我会使用关系数据库 - SQL Server。因为我喜欢 Microsoft 工具和 ASP MVC(我知道有很多人不喜欢,但这是我的偏好)并且它有一个可以将 JSON 转换为 c# 对象的序列化程序。因为我也喜欢使用 Entity Framework ,而 Entity Framework 可以将 c# 对象转换为数据库内容,所以我会像我的 JSON 对象一样构造一个数据库。然后我会有一个接受这些 JSON 实体的 api,ASP MVC 会自动将它们转换为 c# 对象,而 Entity Framework 会自动将它们转换为数据库行。这样一来,整个上传 API 就不会超过几行代码。

然后我会为不同类型的数据查询创建更多的 API 方法。 Linq 和 Entity Framework 有时使不同的查询变得像一行代码一样简单。

关于c# - 如何存储数十亿个 JSON 文件并进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775026/

相关文章:

c++ - 无法将参数从 'int' 转换为 'int&'

c# - 使用 IHubContext 实例化 SignalR Hub 对象

c# - 从 C# 到 C++ 的数组再返回,没有不安全的代码

c# - 带有制表符分隔文本文件的 StreamReader

java - 在 Android 中接收/阅读电子邮件

c++ - 来自绑定(bind)方法的原始函数指针

c# - 如何将 Dapper 与包含两个表之间的 INNER JOIN 的 SELECT 存储过程一起使用?

java - Android 蓝牙 LE 扫描仪仅在某些设备中打开手机位置功能时进行扫描

java - 大负载 OkHTTP 上的流意外结束

c++ - 使用 clGetDeviceInfo 从内存读取访问冲突