Database design 哪些对象数据库允许对数据库中的所有内容进行索引?
目前,不允许对集合的内容进行索引。哪些对象数据库允许对数据库中的任何单个字段进行索引 例如:Database design 哪些对象数据库允许对数据库中的所有内容进行索引?,database-design,db4o,object-oriented-database,Database Design,Db4o,Object Oriented Database,目前,不允许对集合的内容进行索引。哪些对象数据库允许对数据库中的任何单个字段进行索引 例如: class RootClass { string thisIsIndexed; // Field can be indexed for quick searching. IList<SubClass> contentsNotIndexed = new ArrayList(); // Creates a 1-to-many relationship. } class SubCla
class RootClass
{
string thisIsIndexed; // Field can be indexed for quick searching.
IList<SubClass> contentsNotIndexed = new ArrayList(); // Creates a 1-to-many relationship.
}
class SubClass
{
string thisIsNotIndexed; // Field cannot be indexed.
}
class根类
{
字符串ThisIndexed;//可以为字段编制索引以进行快速搜索。
IList contentsNotIndexed=new ArrayList();//创建一对多关系。
}
类子类
{
字符串thisIsNotIndexed;//无法为字段编制索引。
}
为了让db4o按字段“thisisnotindex”进行搜索,它必须将完整的对象加载到内存中,然后使用linqto对象扫描字段。这很慢,因为这意味着您可能必须将整个数据库加载到RAM中才能进行搜索。解决这个问题的方法是将所有要搜索的字段都放在根对象中,然而,这似乎是人为的限制
是否有任何对象数据库不受此限制,并且允许对子对象中的任何字符串进行索引
更新
答复#1:
我发现了一种兼顾两方面的方法:易用性(具有层次结构),以及在整个树上使用完整索引盲目快速地进行本机查询。这涉及到一些技巧,以及一种缓存父节点内容的方法:
如果使用数组而不是列表,则可以使用SODA下降到子节点。如果您使用列表,SODA不支持它,因此您无法使用SODA(或任何依赖于SODA的其他内容,如LINQ、QBE、本机查询等)进行查询。我是基于我在Scala和Java下使用DB40的经验,但希望这仍然有效:“contentsNotIndexed”字段包含ArrayList实例,因此,对该字段进行索引应该只在查询这些ArrayList实例时提供帮助。如果要高效地查询这些列表的内容,必须在列表中查找的对象上定义一个索引,然后将查询放入“contentsNotIndexed”字段下的ArrayList中。但我不知道ArrayList的内部结构,也不知道它可能会下降到哪里
根据您的需要,在某些情况下,您还可以将类设计为使用数组而不是ArrayList,以达到您想要的效果。我是基于在Scala和Java下使用DB40的经验,但希望这仍然有效:“contentsNotIndexed”字段包含ArrayList实例,因此,对该字段进行索引应该只在查询这些ArrayList实例时提供帮助。如果要高效地查询这些列表的内容,必须在列表中查找的对象上定义一个索引,然后将查询放入“contentsNotIndexed”字段下的ArrayList中。但我不知道ArrayList的内部结构,也不知道它可能会下降到哪里
根据需要,在某些情况下,您还可以将类设计为使用数组而不是ArrayList,以达到所需的效果。好的,您可以为子类编制索引。在您的示例中,这不是索引。因此,您可以快速找到子类实例 但你当然是对的,你不能索引集合。我的意思是,如果集合包含某些元素等,就不可能有有效的查询。例如,如果您想要查询包含某个子类的所有RootClass。由于缺乏适当的集合索引,这种情况将很慢 在db4o中,您必须解决这个问题。例如,在子类上添加一个字段,其中包含对父类的引用。然后您可以高效地执行查询 另一件小事。可以在集合字段上设置索引。但这只是对集合对象引用的索引。这将允许您查找引用某个集合实例的对象。这通常是毫无用处的
我猜较大的对象数据库确实支持对集合和查询进行索引 好的,您可以为该子类编制索引。在您的示例中,该子类没有编制索引。因此,您可以快速找到子类实例 但你当然是对的,你不能索引集合。我的意思是,如果集合包含某些元素等,就不可能有有效的查询。例如,如果您想要查询包含某个子类的所有RootClass。由于缺乏适当的集合索引,这种情况将很慢 在db4o中,您必须解决这个问题。例如,在子类上添加一个字段,其中包含对父类的引用。然后您可以高效地执行查询 另一件小事。可以在集合字段上设置索引。但这只是对集合对象引用的索引。这将允许您查找引用某个集合实例的对象。这通常是毫无用处的 我猜较大的对象数据库确实支持对集合和查询进行索引 谢谢,我真的很感激