gpt4 book ai didi

c# - 从 db 查询对象的 db4o 最佳实践

转载 作者:太空狗 更新时间:2023-10-29 17:40:55 24 4
gpt4 key购买 nike

我正在使用两种不同的方式来查询 db4o 中的对象,我想讨论一下。

1) 在第一个示例中,我创建了一个 ObjectContainer 实例,打开连接,然后关闭它。

ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "User");
ObjectSet result = db.queryByExample(user);
db.close();

2) 在第二个示例中,我创建了一个 ObjectServer 并在应用程序的整个生命周期内打开连接。我还从 ObjectServer 打开 ObjectContainer,进行查询,然后关闭它:

ObjectServer userDb = Db4oClientServer.openServer(Db4oClientServer.newServerConfiguration(), "User", 0);
ObjectContainer client = client = userDb.openClient();
ObjectSet result = client.queryByExample(user);
client.close();

--

这两种方法的主要区别是什么?如果我从不关闭 ObjectServer 会很危险吗?

在我看来,第二种方法更好,因为如果两个不同的实例调用第一个例子中显示的方法,第二个调用者将得到一个异常,导致数据库被锁定,但在第二个例子中我没有有这样的问题。由于我对 db4o 没有太多经验,所以我更愿意询问我是否走在正确的道路上。

最佳答案

当您在整个应用程序生命周期中保持连接打开时,db4o 的效果最佳。

如果您检索一个对象,关闭数据库,重新打开它并再次存储该对象,db4o 将不会意识到该对象已经存储(因为您关闭了连接并且 db4o 的引用系统也从那里存储)并将存储第二个实例。

另一个问题(如果你在嵌入式模式下运行 db4o)是打开数据库是一个耗时的操作,所以,如果你一直打开/关闭数据库,肯定会有性能问题(另一方面,打开客户端连接成本并不高,因此应该不会造成任何问题)。

关于c# - 从 db 查询对象的 db4o 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5996892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com