首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >db4o索引问题-不工作?表现不佳?

db4o索引问题-不工作?表现不佳?
EN

Stack Overflow用户
提问于 2010-02-25 17:34:39
回答 2查看 1.4K关注 0票数 0

我正在尝试使用db4o作为我的新网站的后端。

我已经按照我认为合理的方式进行了设置,并插入了大约5k条记录(只有一种对象类型,具有大约7个原始字段)。

根据我读过的一些博客文章,我已经将属性设置为非自动属性,并尝试在公共属性公开的私有成员上设置索引。

查询性能真的很差,一个简单的索引查找需要3/4秒。

我的实现如下:我的'Server‘是一个静态单例,每个应用程序实例只打开一次。

代码语言:javascript
复制
Db4oFactory.Configure().ObjectClass(typeof(MyObject)).ObjectField("_Id").Indexed(true);
server = Db4oClientServer.OpenServer("DatabseName", 0);

然后,查询:

代码语言:javascript
复制
using (var ooDB = server.OpenClient())
{
    var movieFound = (from MyObject m in ooDB
                    where m.Id == IdToFind
                    select m).FirstOrDefault();
}

我的对象是:

代码语言:javascript
复制
public class MyObject
{
    protected string _Id;
    public string Id 
    { 
        get { return _Id; } 
        set { _Id = value; } 
    }
}

对象的Id是一个字符串。

我到底做错了什么!

干杯,戴夫

EN

回答 2

Stack Overflow用户

发布于 2010-02-25 21:01:12

这是一个旧API (版本7.4,为了兼容,仍在这里)和新API (版本7.12)的不幸组合。未使用该配置,因此未创建索引。

方法调用'Db4oFactory.Configure()‘属于较旧的API。仅当您使用旧接口'Db4oFactory.OpenServer()‘创建ObjectContainer时才使用它。这种全局配置有一些潜在的问题。所以我会避开它。

现在我推荐使用新的API。在那里,您必须显式地传递配置。同时,配置界面也更加整洁。尤其是客户端/服务器的配置是分离的。使用'Db4oClientServer.NewServerConfiguration()‘创建新配置。然后将其传递给'Db4oClientServer.OpenServer‘。因此,在您的情况下,这将是:

代码语言:javascript
复制
        IServerConfiguration cfg = Db4oClientServer.NewServerConfiguration();
        cfg.Common.ObjectClass(typeof(MyObject)).ObjectField("_Id").Indexed(true);

        IObjectServer server = Db4oClientServer.OpenServer(cfg, "DatabseName.db4o", 0);
票数 3
EN

Stack Overflow用户

发布于 2010-02-25 18:51:40

我已经有一段时间没有使用db4o了,但是这里让我印象深刻的是查询属性并在支持字段上创建索引。除非db4o设法理解这种关系(有可能,但我现在对此表示怀疑),否则它将恢复每个存储的实例,以访问属性并评估您的查询。

你能链接到要求这种索引设置的帖子吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2332954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档