我正在尝试使用db4o作为我的新网站的后端。
我已经按照我认为合理的方式进行了设置,并插入了大约5k条记录(只有一种对象类型,具有大约7个原始字段)。
根据我读过的一些博客文章,我已经将属性设置为非自动属性,并尝试在公共属性公开的私有成员上设置索引。
查询性能真的很差,一个简单的索引查找需要3/4秒。
我的实现如下:我的'Server‘是一个静态单例,每个应用程序实例只打开一次。
Db4oFactory.Configure().ObjectClass(typeof(MyObject)).ObjectField("_Id").Indexed(true);
server = Db4oClientServer.OpenServer("DatabseName", 0);然后,查询:
using (var ooDB = server.OpenClient())
{
var movieFound = (from MyObject m in ooDB
where m.Id == IdToFind
select m).FirstOrDefault();
}我的对象是:
public class MyObject
{
protected string _Id;
public string Id
{
get { return _Id; }
set { _Id = value; }
}
}对象的Id是一个字符串。
我到底做错了什么!
干杯,戴夫
发布于 2010-02-25 21:01:12
这是一个旧API (版本7.4,为了兼容,仍在这里)和新API (版本7.12)的不幸组合。未使用该配置,因此未创建索引。
方法调用'Db4oFactory.Configure()‘属于较旧的API。仅当您使用旧接口'Db4oFactory.OpenServer()‘创建ObjectContainer时才使用它。这种全局配置有一些潜在的问题。所以我会避开它。
现在我推荐使用新的API。在那里,您必须显式地传递配置。同时,配置界面也更加整洁。尤其是客户端/服务器的配置是分离的。使用'Db4oClientServer.NewServerConfiguration()‘创建新配置。然后将其传递给'Db4oClientServer.OpenServer‘。因此,在您的情况下,这将是:
IServerConfiguration cfg = Db4oClientServer.NewServerConfiguration();
cfg.Common.ObjectClass(typeof(MyObject)).ObjectField("_Id").Indexed(true);
IObjectServer server = Db4oClientServer.OpenServer(cfg, "DatabseName.db4o", 0);发布于 2010-02-25 18:51:40
我已经有一段时间没有使用db4o了,但是这里让我印象深刻的是查询属性并在支持字段上创建索引。除非db4o设法理解这种关系(有可能,但我现在对此表示怀疑),否则它将恢复每个存储的实例,以访问属性并评估您的查询。
你能链接到要求这种索引设置的帖子吗?
https://stackoverflow.com/questions/2332954
复制相似问题