2013-02-07 135 views
0

我目前有一個API接受JSON文件(它是包含一些用戶事務數據的JSON序列化對象)並將其存儲到服務器中。每個這樣的JSON文件都有一個唯一的全局ID和與之相關聯的唯一用戶。然後,用戶應該能夠查詢與他相關的所有JSON文件,並生成一堆計算在這些文件之上的聚合結果。爲JSON數據文件設計文件系統和數據庫

**編輯:

需要存儲一個典型的JSON文件看起來像:

[{ 「的sequenceNumber」:125435, 「貨幣代碼」: 「INR」, 「vatRegistrationNumber」:」 10868758650" , 「receiptNumber」:{ 「值」: 「1E466GDX5X2C」}, 「retailTransaction」:[{ 「otherAttributes」:{} 「訂單項」:[{ 「的sequenceNumber」:1000, 「otherAttributes」:{},」銷售「:{」otherAttributes「:{},」description「:」Samsung galaxy S3「,」unitCostPrice「:{」quantity「:1,」value「:35000},」discountAmount「:{」value「 「貨幣」: 「INR」}, 「itemSubType」: 「智能電話」}},{ 「的sequenceNumber」:1000, 「otherAttributes」:{}, 「customerOrderForPickup」:{ 「otherAttributes」:{}, 「說明」:」 iPhone5" 的, 「unitCostPrice」:{ 「量」:1,「VA略 「:55000},」 discountAmount 「:{」 值 「:5000,」 貨幣 「:」 INR 「},」 itemSubType 「:」 智能電話 「}}],」 總 「:[{」 值 「:35000,」類型「:」TransactionGrossAmount「,」otherAttributes「:{}}],」grandTotal「:90000.0,」reason「:」Delivery「},null]}]

上面的JSON是複雜對象的序列化版本包含單個或其他類的對象數組作爲屬性。所以'receiptNumber'是JSON文件的通用標識。

要回答Sammaye的問題,我需要查詢的東西,如customerOrderForPickup或交易的grandTotal的數量和價值,並在各種這樣的交易JSONs 的aggegate **

我想有一些建議,至於如何去: 1)我應該使用什麼樣的數據庫,通過這些JSON文件,如此複雜的結構來查詢服務器,文件系統,即 2)上存儲這些JSON文件

我的研究導致了幾種可能性: 1)使用MongoDB數據庫來存儲對象的JSON代表並通過數據庫查詢。如何存儲JSON文件?將事務JSON存儲在MongoDB數據庫中的最佳方式是什麼? 2)將包含唯一全局標識,用戶標識和服務器上JSON文件地址的SQL數據庫與這些文件上的彙總代碼結合起來。我懷疑這是否可以縮放

如果有人對此問題有任何見解,會很高興。謝謝。

+0

關於mongo的好處是你不必考慮json blob作爲文件。這只是你mongodb中的數據。所以你插入它並查詢它,並可以做你喜歡的聚合。這可能是滿足您的需求最直接的方法。 –

+0

你想在JSON字符串上執行哪種查詢? – Sammaye

回答

1

我可以看到2個選項:

  1. 存儲在MongoDB中,正如你所說,只需要創建一個集合,並直接添加每個JSON文件作爲文檔集合。您可能需要稍微更改JSON的佈局以提高可查詢性。
  2. 存儲在HDFS中,並在其上層Hive。 Hive中有一個JSON SerDe(串行器解串器)。這也可以很好地擴展。