我目前正在尝试db4o(Java版本),我非常喜欢我所看到的。但是我不禁想知道它在真实的实时(网络)环境中的性能如何。是否有人可以分享有关运行db4o的经验(好坏)?
我们在大型客户端/服务器项目中运行DB40 .NET版本。
我们的经验是,您可能会获得比典型的关系数据库更好的性能。
但是,您实际上必须调整对象才能获得这种性能。例如,如果您有一个包含很多对象的列表,则这些列表的DB4O激活很慢。有许多方法可以解决此问题,例如,通过反转关系。
另一个痛苦是激活。当您从DB4O检索或删除对象时,缺省情况下它将激活整个对象树。例如,加载Foo将加载Foo.Bar.Baz.Bat等,直到没有剩余可加载的内容为止。从编程的角度来看这很好,但性能会减慢对象中更多的嵌套。为了提高性能,您可以告诉DB4O激活多少个级别。如果您有很多对象,这将很耗时。
另一个痛苦的领域是文本搜索。DB4O的文本搜索远比SQL全文索引慢得多。(他们会在他们的网站上直接告诉您。)好消息是,在DB4O之上设置文本搜索引擎很容易。在我们的项目中,我们已经连接了Lucene.NET来索引所需的文本字段。
某些API似乎不起作用,例如GetField API在应用数据库升级中很有用。(例如,您已重命名属性,并且想要升级数据库中的现有对象,则需要使用这些“反射”
API来在数据库中查找对象。其他API,例如[Index]属性不要)不能在稳定的6.4版本中使用,而必须使用不是强类型的Configure()。Index(“
someField”)指定索引。
我们已经看到,性能会随着数据库的扩大而降低。我们现在有一个1GB的数据库,并且运行速度仍然很快,但不及开始使用小型数据库时的速度。
我们发现了另一个问题,如果该ID在数据库中不再存在,则Db4O.GetByID将关闭数据库。
我们发现本机查询语法(最自然的,语言集成的查询语法)远比不友好的SODA查询慢得多。因此,不要键入:
// C# syntax for "Find all MyFoos with Bar == 23".
// (Note the Java syntax is more verbose using the Predicate class.)
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23);
除了使用漂亮的查询代码外,您还必须执行一个丑陋的SODA查询,该查询基于字符串并且不是强类型的。
对于.NET人士,他们最近引入了LINQ-to-DB4O提供程序,该提供程序提供了迄今为止最好的语法。但是,尚不知道性能是否可以与丑陋的SODA查询媲美。
对DB4O的支持一直不错:我们已经通过电话与他们进行了多次交谈,并获得了有用的信息。他们的用户论坛几乎一文不值,但是,几乎所有问题都没有得到解答。他们的JIRA错误跟踪器引起了广泛的关注,因此,如果您遇到了一个烦人的错误,请将其归档到JIRA上通常会得到解决。(我们已经修复了2个错误,另外一个以半确定的方式进行了修补。)
如果这还没有使您感到恐惧,那么尽管遇到了很多问题,但我还是说我们对DB4O感到非常满意。我们获得的性能使我们尝试过的一些O / RM框架大为失败。我推荐它。
更新时间:2015年7月 请记住,这个答案写于2008年。尽管我很感谢大家的支持,但此后世界已经发生了变化,并且此信息可能不如撰写时可靠。
db4o 开源对象数据库 完全原生于Java和.NET 100% 面向对象, 抛开对象-关系映射 为嵌入式应用优化 开源,可以基于GPL协议免费使用. 可嵌入db4o的原始Java 和 .NET对象数据库引擎到您的产品和商店,甚至更为复杂的对象结构而仅需要一行的编码! db4o 可帮您节省研发的费用和时间,提供更为优质的运作, 且不需要雇佣数据库管理员。 下载和测试硬体 世界上最流行的对象数据库!
db4o-netbeans 是一个用来管理 db4o 数据库的 NetBeans 插件。 在线安装地址:http://db4o-netbeans.googlecode.com/svn/trunk/updateNB6/updates.xml
记录2:2.5笔试 1. C++写一个简易的计算器 2. TCP/IP 协议分层及理解 :https://blog.csdn.net/weixin_53695360/article/details/124585802 3. 对象构造和析构顺序 first: 调用父类的构造函数 second: 调用成员变量的构造函数(调用顺序与声明顺序相同) finally: 调用类自身的构造函数 **** 析构函
# 3月9日 ## 中科鼎创 C++开发实习 1. 怎么理解C++和C的区别?面向对象?面向过程? 2. 用C实现面向对象 3. 类里面能否有引用 4. 引用和指针的区别 5. 数据库中索引的作用 6. 用C写的程序,崩溃的原因 7. 数组越界一定会导致崩溃么 8. Linux中“交换区”的作用 9. Linux从开机键按下到开机,经历了什么 10. 用过JOA?代码管理工具么(记不清了,只记得什
9.8 用友二面 汪**面试官,人很好 1、自我介绍 2、ArrayList的扩容机制 3、String类中的replace方法和replaceall方法的区别 4、状态码400和500的含义,除了404还了解过哪些 场景题 1、面试官给了两段代码,要求说出输出是多少,原因 2、MySQL数据库的自增ID 3、Mybatis的分页 分布式、微服务 1、谈谈你对微服务、分布式的理解 两道算法题: 1
华为一面 1.撕题 距离最近1的距离 两种方法不同复杂度 2.多线程及多线程的同步 3.指针和引用区别 4.为什么用move