簡體   English   中英

記帳RESTful API,或者避免MongoDB缺少DECIMAL數據類型和對TRANSACTIONS的支持

[英]An Accounting RESTful API or, circumventing MongoDB's lack of DECIMAL data type and support for TRANSACTIONS

我正在評估MongoDB作為我們財務/會計RESTful API的存儲解決方案。 我知道MongoDB缺少事務和十進制數據類型,但是:

我想我可以通過將小數存儲為整數,然后根據需要將其除以/乘以精度因子來克服小數的不足。 消費者將通過API層加載(GET)和保存(PUT / POST),這使我可以在API級別上進行轉換。 存儲整數將允許根據需要進行計算和原子更新。

我也不認為MongoDB缺乏交易會成為障礙,至少在我看來並不是這樣:REST API不允許進行大量的“一次調用就適合所有”多次更新。 如果在“邏輯”事務(多個后續更新調用的鏈)中失敗,則實現回滾邏輯將是消費者的責任。

存儲在數據庫中的“對象”是發票,庫存,付款...標准會計資料。 盡管關系數據模型已被證明是存儲此類數據的一個很好的解決方案,但我看不到無模式存儲將如何引起麻煩。 拿發票項目。 我可以將每個文檔與嵌套訂單項一起存儲在Documents集合中。 當然,我仍然需要幾個集合:文檔,付款,聯系人等,這就是為什么MongoDB使用集合對我來說很合適的原因。

有人做過類似的事情嗎? 我仍處於設計階段,因此我真的會使用MongoDB / REST資深人士的一些反饋-謝謝。

PS:如果您想知道,我會很好地使用RDBMS解決方案,但是我想考慮替代方案,並且我發現采用無模式方法會帶來一些優勢。 首先,MongoDB輸出JSON / BSON,這是REST API可以使用的。 其次,無模式意味着我可以接收具有可變字段數的文檔並立即存儲它,而不必擔心丟失的字段(在數據庫中為空,在構建數據庫時將需要很多if IsNULL(fieldname)對GET請求的響應)等

人們正在將小數存儲為整數。 如果您在MongoDB的jira中處理了十進制支持功能請求,您會看到一對夫婦提到這是他們的解決方法: https : //jira.mongodb.org/browse/SERVER-1393

請注意,當您進行貼圖減少和將兩個或多個此類數字相乘/相除的東西時,該因子將復合。

至於缺乏交易,聽起來今天對您來說不是問題,但是明天呢? 如果您的API將始終處理較小的工作單元,請確定。 2階段提交也總是可能的。

我認為學習新技術真是太好了...不會建議您不要。 但是請考慮一下,當您需要查詢那些字段時,無模式確實會大放異彩。 如果不這樣做,則可以將它們全部存儲在文檔或關系數據庫中的一個單獨的字段或列中。 (盡管,每當我看到一個項目執行此操作時,他們都需要3個月的時間來開始查詢/報告/對這些序列化值之一進行操作,這確實很痛苦)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM