如何存储数十亿个JSON文件并对其进行查询
How to store billions of JSON files and query them
我目前有一个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的数量和价值或交易的grandTotal,并作为各种此类交易的aggegate JSONs**
我想就如何进行提出一些建议:1)将这些JSON文件存储在服务器上,即文件系统上。2)我应该使用什么样的数据库来查询具有如此复杂结构的的JSON文件
我的研究得出了两种可能性:1)使用MongoDB数据库来存储对象的JSON代表,并通过数据库进行查询。JSON文件将如何存储?在MongoDB数据库中存储事务JSON的最佳方式是什么?2) 将包含唯一全局id、用户id和服务器上JSON文件地址的SQL数据库与这些文件上的聚合代码结合起来。我怀疑这是否可以缩放
如果有人对这个问题有任何见解,我会很高兴。谢谢
我想说你的问题很一般,实际上是风格和偏好的问题。你可以用10种不同的方式做到这一点,每一种都会非常好。
我将给出我的个人偏好以及我将如何做到:
由于有很多数据,我会使用关系数据库-SQL Server。由于我喜欢Microsoft工具和ASPMVC(我知道有很多人不喜欢,但这是我的偏好),而且它有一个序列化程序,可以将JSON转换为c#对象。由于我也喜欢使用实体框架,并且实体框架可以将c#对象转换为数据库内容,所以我只想用JSON对象的外观来构建数据库。然后我会有一个api来接受那些JSON实体,ASPMVC会自动将它们转换为c#对象,实体框架会自动将其转换为数据库行。通过这种方式,整个上传API不需要超过几行代码。
然后,我将为不同类型的数据查询创建更多的API方法。Linq和实体框架有时会将不同的查询简化为一行代码。
- Mongodb c++驱动程序:如何查询元素的数组
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 如何读取/查询文件系统和文件结构
- 查询有关标头文件中大小的声明
- 查询从内存映射文件检索到的Rtree时出现分段错误
- C++和 Sqlite DELETE 查询实际上不会从数据库文件中删除该值
- 具有多个值的 sql 列(cpp 文件中的查询实现)
- 用于查询大量csv文件的工具
- 如何在窗口中查询文件中的所有锁持有者
- 读取文件行和查询结果的编程函数
- 如何查询json文件中对象的值
- 如何在IBM AS/400上使用c++查询文件
- 如何存储数十亿个JSON文件并对其进行查询
- 用于查询大文件的 Windows 文件系统 API