2012-06-28 39 views
0

我有DB用户,每个用户有多个属性。例如:哪个noSQL DB适合快速查询变量多个字段?

{userid : 1, emails : {[email protected], [email protected], [email protected]}, countries : {Italy, France, USA}, food : {pasta}} 

每个属性可以包含多个值。

Web应用程序的生命周期中,我想添加更多的属性,例如:汽车,颜色....

所以一般来说,我会1B用户,每一个与3-20性质 - 每个用户都有自己的属性子集,20个可能的属性。

最重要的事情是:

  1. 要尽可能快地执行以下查询: 找到我所有用户[email protected]或汽车=奔驰或食物=面食或颜色=黑色或颜色=蓝色或用户ID = 10或用户ID = 20。 在每个查询中,我将查询属性的不同子集。

  2. 能够很容易地向DB添加新属性。即在某一天我还想添加'性别'属性,我希望对这个属性的查询将会很快。

  3. 每个用户都有属性

  4. 该查询将是“属性=值”的唯一子集。我不需要查询,如'property> value'或'property start with value'。我将所有值视为常量键。

  5. 在很多情况下,我会添加新用户,但最重要的是快速查询它们。

  6. 应该是持久的,可扩展性,故障转移

  7. 如果它的事,我的web应用程序将在Java中

回答

1

写你说的快呢?

大多数数据库会尽可能快地做你想做的事情。除非你有特定的延迟要求,否则我会选择一个流行的nosql数据库,比如mongodb。

为了获得更高的性能,可以使用专为此类查询设计的LDAP数据库。如果您拥有每秒100K +查询和100K +用户的订单,那么它们特别有用。

+0

我必须处理15K /秒的查询,并在不到10ms内回答每个查询。关于mongodb - 我将不得不在20个属性中的每一个上创建索引。我不知道如此多的索引对数据库大小和整体性能有什么影响 – Dani

+0

在这种情况下,我会考虑使用LDAP数据库。 http://www.openldap.org/pub/hyc/mdm-paper.pdf注意:每台服务器每秒可处理20K到80K个查询,具体取决于具有亚毫秒响应时间的服务器规格。我之前使用过Sun One Directory Server,但任何LDAP服务器都应该运行良好。 –

+0

我会检查出来。 您是否可以考虑适用于此任务的其他noSQL DB? Cassandra,Couchbase,hbase,BigTable? – Dani