为JSON数据文件设计文件系统和数据库

时间:2013-02-07 14:47:10

标签: sql json mongodb filesystems webserver

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

**编辑:

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

[{ “的sequenceNumber”:125435 “CURRENCYCODE”: “INR”, “vatRegistrationNumber”: “10868758650”, “receiptNumber”:{ “值”: “1E466GDX5X2C”}, “retailTransaction”:[{ “otherAttributes” :{},“lineItem”:[{“sequenceNumber”:1000,“otherAttributes”:{},“sale”:{“otherAttributes”:{},“description”:“Samsung galaxy S3”,“unitCostPrice”:{ “量”:1, “值”:35000}, “discountAmount”:{ “值”:2500, “货币”: “INR”}, “itemSubType”: “智能电话”}},{ “的sequenceNumber”:1000, “otherAttributes”:{}, “customerOrderForPickup”:{ “otherAttributes”:{}, “说明”: “iPhone5的”, “unitCostPrice”:{ “量”:1, “值”:55000}, “discountAmount”:{ “值”:5000, “货币”: “INR”}, “itemSubType”: “智能电话”}}], “总”:[{ “值”:35000, “类型”: “TransactionGrossAmount”, “otherAttributes”: {}}], “grandTotal”:90000.0, “原因”: “交货”},空]}]

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

要回答Sammaye的问题,我需要查询诸如customerOrderForPickup的数量和价值或交易的grandTotal之类的东西,并作为各种此类交易JSON的aggegate。 **

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

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

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

1 个答案:

答案 0 :(得分:1)

我可以看到两个选项:

  1. 如上所述,存储在MongoDB中,只需创建一个集合,并将每个JSON文件作为文档直接添加到集合中。您可能需要稍微更改JSON的布局以提高可查询性。
  2. 存储在HDFS中,并在其上添加层Hive。 Hive中有一个JSON SerDe(Serializer Deserializer)。这也可以很好地扩展。