Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持久化动态属性和查询_Java_Oop - Fatal编程技术网

Java 持久化动态属性和查询

Java 持久化动态属性和查询,java,oop,Java,Oop,我需要实现联系人数据库。此联系人数据库的特殊之处在于,用户应该能够动态(在运行时)添加他/她想要跟踪的联系人的属性。其中一些属性的类型为字符串、其他数字和日期。一些属性具有预定义的值,其他属性是自由字段等。。用户还希望能够快速方便地查询此类结构。数据库需要轻松处理50万个联系人,每个联系人大约有10个属性 class Contact{ private Map<DynamicProperty, Collection<DynamicValue> values> proper

我需要实现联系人数据库。此联系人数据库的特殊之处在于,用户应该能够动态(在运行时)添加他/她想要跟踪的联系人的属性。其中一些属性的类型为字符串、其他数字和日期。一些属性具有预定义的值,其他属性是自由字段等。。用户还希望能够快速方便地查询此类结构。数据库需要轻松处理50万个联系人,每个联系人大约有10个属性

class Contact{

private Map<DynamicProperty, Collection<DynamicValue> values> propertiesAndValues;

//other userfull methods

}
它导致动态属性模型具有具有动态属性的Contact类

class Contact{

private Map<DynamicProperty, Collection<DynamicValue> values> propertiesAndValues;

//other userfull methods

}

我考虑以下选项:

  • 将联系人存储在RDBMS中,并使用Lucene进行查询-是否有任何帮助
  • 将动态属性存储为XML,并将其存储到rdbms,并使用xpath支持——不幸的是,对于500000个联系人来说,这似乎相当缓慢
  • 使用另一个数据库—Mango DB或Jackrabbit来存储此信息
您会走哪条路?为什么?

您考虑过使用它来满足您的查询需求吗?您可能只需要使用Lucene并将所有数据存储在索引中就可以了。尽管我不推荐使用Lucene作为您唯一的持久性存储


或者,您可以将Lucene与RDBMS一起使用,并利用类似的功能。

Wikipedia有一个很好的条目,它是一种用于表示具有任意属性的实体的数据建模技术。它通常用于临床数据,但也可能适用于您的情况

  • 您可以尝试其他类型的数据库,比如CouchDB,它是一种面向文档的数据库,并且是分布式的
  • 如果您想要一个哑解决方案,您可以为联系人表添加大约50列,如STRING\u COLUMN1、STRING\u COLUMN2。。。最多10个,日期列1..日期列10。您有另一个描述列。因此,如果一行的名称是字符串,则string\u COLUMN1存储名称的值,而DESCRIPTION列的值将是“string\u COLUMN1-name”。在这种情况下,查询可能有点棘手。我知道许多纯粹主义者对此嗤之以鼻,但我在其中一个应用程序中也看到了类似的需求: