2010-11-06 45 views
1

我創建一個Java web服務器來存儲位置數據(緯度,經度和時間)的JSON字符串 我想知道是否有任何優點(性能,可伸縮性,維護等)使用db4o似乎更容易在java中使用,而不是sql,sqlite。 Hibernate和db4o之間還有什麼區別;db4o vs sql,sqlite在java服務器

回答

4

DB4O與傳統的基於SQL的RDBMS完全不同。

您需要更好地定義您的要求。例如,DB4O可以相對容易地跟蹤圖形 - 代表JSON的特定結構可能適合該領域。另一方面,DB4O對查詢(特別是報告和聚合)絕對不適合先前定義的圖。

編輯:以上是我的經驗與DB4O(我用的DB40 結合一個SQL RDMBS) - 我做的(以及會)仍然使用DB4O,因爲我覺得它有很多優點。然而,我覺得它更適合於特定的應用程序,這些應用程序必須明確定義claw hammer),而傳統的SQL RDMB(sledgehammer)具有更廣泛的範圍,可以很好地應對即使不良或平坦的模式,也可以禁止性能考慮因素,可以修改爲「切片和切塊」。兩者都是具有重疊但不同目的的工具 - 人們可以用大錘釘錘(可能不太漂亮),但是試圖用爪錘擊倒水泥牆。

+0

您的評論有點棘手。事實上,db4o依賴於你定義一個很好的面向對象的模型。然後查詢功能非常強大。 db4o對.NET很好地支持LINQ,即使在CompattFramework上也是如此,在Java方面它帶有一種我們稱之爲「Native Queries」的機制。 – 2010-11-07 12:12:01

3

「db4o」中的「o」代表「o​​bjects」。這是一個對象數據庫,所以如果你的問題不是「真實的」面向對象的,這可能不適合你。對象數據庫確實適用於深對象圖,長參考鏈(例如CAD或有限元幾何數據)的問題。

閱讀他們的reference guide

至於存儲描述的JSON字符串,我認爲任何持久性技術都可以。當你放棄SQL時,一定要知道你在做什麼。我並不認爲SQL和關係數據庫是唯一的答案。我只是告誡你,在你有一些數據證明它之前,不要假設你會遇到性能,可擴展性等問題。

0

如果您能夠將JSON字符串映射到衆所周知的對象類型(具有相同字段的類定義的服務器端,並且在接收到請求時從JSON翻譯/映射到那些衆所周知的類型),那麼db4o會爲你工作。但其他一些解決方案也是如此。還有一些NoSQL數據庫專門支持JSON對象和查詢。 (如Mongo DB或Couch DB),但是(如duffymo所述),當你選擇NoSQL數據庫時,你通常不得不放棄其他一些東西......比如事務性,可組合性(查詢第1列和第3列以及加入另一個隨機表)或大多數人從數據庫中假設的其他功能。 (比如Hibernate),db4o就像許多其他的一樣,db4o只處理衆所周知的對象類型和圖形。它不會讓你的物體以任何其他形狀出現,但它們在插入時就處於其中。但db4o確實可以讓你查詢任何對象上的任何字段。 (一些NoSQL數據庫要求您預先定義哪些/哪些字段是可查詢值)