2011-02-25 53 views
2

我有一个项目,它在数据库中存储了数百万个域名,并执行搜索请求来查找域是否存在于数据库中。我需要的唯一操作 - 检查给定值是否存在。没有范围查询,没有附加信息,什么都没有。针对域名数据库选择哪种NoSQL解决方案?

查询我做数据库的数量是相当大的,例如100000每一个用户会话。

我每天一次新的数据库,甚至有可能检查什么记录被删除,并添加了什么 - 我不认为这是值得的。所以,我正在将数据库导入新表并将脚本指向新名称。

寻找可以使整个事情更快的解决方案,因为我不使用任何SQL功能。名称搜索和导入时间对我很重要。

我的服务器不能存储这个数据库在内存中,甚至一半,所以我觉得有些NoSQL的解决方案,从硬盘驱动器的工作能帮助我。

你能提出一些建议吗?

回答

1

一个更小,更快的解决方案是使用Berkeley DBkey-value pair API。 Berkeley DB是一个链接到您的应用程序的数据库库,因此不需要客户端/服务器开销,也不需要单独的服务器来安装和管理。 Berkeley DB非常简单,在几个API中提供了一个简单的键值(NoSQL)API,它提供了所有基本数据管理例程,您可以在更大,更复杂的RDBMS中找到这些例程(索引,二级索引,外键),但没有SQL引擎的开销。

声明:我是Berkeley DB的产品经理,所以我有点偏见。也就是说,它的设计宗旨就是完成您所要求的 - 简单,快速,可扩展的键值数据管理,而不会产生不必要的开销。

实际上,有许多“数据库域”类型的应用程序服务使用Berkeley DB作为其主数据存储。大多数开源和/或商业LDAP实现使用Berkeley DB(包括OpenLDAP,Redhat的LDAP,Sun Directory Server等)。 Cisco,Juniper,AT & T,Alcatel,Mitel,Motorola和其他许多公司使用Berkeley DB来管理他们他们使用Berkeley DB作为他们的网关,认证和配置管理系统,他们使用BDB,因为它确实满足了他们的需求,快速,可扩展和可靠。

1

如果您可以接受非常小的误报率(假设您使用足够大的过滤器),那么您可以很好地得到Bloom filter

在另一方面,你当然可以使用Cassandra。它大量使用bloom滤波器,所以要求不存在的东西很快,而且您不必担心误报。它旨在处理不适合内存的数据集,因此性能下降非常平稳。

导入数据的任何量应当快速 - 正常的机器上,卡桑德拉可以处理大约15k的每次写。

0

这里有很多选择。 Berkeley DB肯定能完成这项工作,可能是最简单的解决方案之一。同样简单:将所有内容都存储在memcached中,如果需要(如果查询加载或数据大小增加),则可以选择在多台计算机上分割值的缓存。

相关问题