0

我有 1B 个用户的数据库,每个用户都有多个属性。例如:

{userid : 1, emails : {xx@xx.com, yy@yy.com, zz@zz.com}, countries : {Italy, France, USA}, food : {pasta}}

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

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

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

最重要的是:

  1. 尽可能快地执行以下查询:使用 email=xx@xx.com OR car=Mercedes OR food=pasta OR color=black OR color=blue OR userid=10 OR userid=20 找到我的所有用户。在每个查询中,我将查询不同的属性子集。

  2. 能够很容易地向数据库添加新属性。即在某一天,我还想添加“性别”属性,并且我希望对这个属性的查询会很快。

  3. 每个用户只有属性的子集

  4. 查询将是“属性=值”。我不需要诸如“property>value”或“property start with value”之类的查询。我将所有值视为常量键。

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

  6. 应该是持久的、可扩展的、具有故障转移的

  7. 如果有关系,我的网络应用程序将用 Java 编写

4

1 回答 1

1

你说的快是什么意思?

大多数数据库会尽可能快地完成您想要的操作。除非您有特定的延迟要求,否则我会选择流行的 nosql 数据库,例如 mongodb。

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

于 2012-06-28T11:27:15.597 回答