db4o vs sql,sqlite在java服务器

问题描述:

我创建一个Java web服务器来存储位置数据(纬度,经度和时间)的JSON字符串 我想知道是否有任何优点(性能,可伸缩性,维护等)使用db4o似乎更容易在java中使用,而不是sql,sqlite。 Hibernate和db4o之间还有什么区别;db4o vs sql,sqlite在java服务器

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

“db4o”中的“o”代表“o​​bjects”。这是一个对象数据库,所以如果你的问题不是“真实的”面向对象的,这可能不适合你。对象数据库确实适用于深对象图,长参考链(例如CAD或有限元几何数据)的问题。

阅读他们的reference guide

至于存储描述的JSON字符串,我认为任何持久性技术都可以。当你放弃SQL时,一定要知道你在做什么。我并不认为SQL和关系数据库是唯一的答案。我只是告诫你,在你有一些数据证明它之前,不要假设你会遇到性能,可扩展性等问题。

如果您能够将JSON字符串映射到众所周知的对象类型(具有相同字段的类定义的服务器端,并且在接收到请求时从JSON翻译/映射到那些众所周知的类型),那么db4o会为你工作。但其他一些解决方案也是如此。还有一些NoSQL数据库专门支持JSON对象和查询。 (如Mongo DB或Couch DB),但是(如duffymo所述),当你选择NoSQL数据库时,你通常不得不放弃其他一些东西......比如事务性,可组合性(查询第1列和第3列以及加入另一个随机表)或大多数人从数据库中假设的其他功能。 (比如Hibernate),db4o就像许多其他的一样,db4o只处理众所周知的对象类型和图形。它不会让你的物体以任何其他形状出现,但它们在插入时就处于其中。但db4o确实可以让你查询任何对象上的任何字段。 (一些NoSQL数据库要求您预先定义哪些/哪些字段是可查询值)