2010-08-15 54 views
8

我们公司正在开发一个项目,需要一个包含3000万到5000万行产品数据的数据库。这些行包含需要每秒同时搜索数千次的文本。而且,每次搜索都需要不到一秒的时间才能执行。海量数据库w /全文检索 - Sphinx,Lucene,Cassandra,MongoDB,CouchDB

因此,总而言之,我们有一个50M的行数据库,需要每秒搜索数千次。请记住,这些是全文搜索。我知道MySQL或任何关系数据库本身不能处理这种类型的工作。因此,我们正在寻找能够为我们设计正确设置的人员,并帮助我们以您指定的价格实施。

首先,我们想知道我们最好的选择是什么。我个人一直在研究诸如狮身人面像,Lucene,Cassandra,MongoDB,CouchDB,Solr等等,但是真的不知道应该用哪一个与另一个结合使用,以便为我们提供最有效的设置。

因此,如果任何人都可以提供一些建议,或接受我们的工作机会,将不胜感激。

您可以通过PM在这里与我联系,我会给你我的电子邮件/ IM /电话号码以便进一步讨论。

谢谢!

回答

2

保罗,欢迎来到SO。这并不是一个真正适合让别人为你工作的地方,但这是我的建议:

如果真的取决于您正在进行的关于编写MySql的搜索类型,可能有点过早。

由于它是产品数据,我想你的搜索是全文搜索,所以注销MySql是不成熟的。狮身人面像是伟大的,但配置有点痛苦。好处是它能够直接从mysql索引,并且还可以与您的应用程序中使用的任何mysql连接器/绑定进行连接,因为它知道如何与mysql的协议进行通信。

我想说cassandra,沙发和mongo不是你真正想要的,它们都不是以狮身人面像的方式索引文本。你可以推出自己的产品,但这样做会适得其反。

我从来没有使用过lucene,但我听说过很好的东西,这是一个类似Sphinx afaik的解决方案。

祝你好运

+0

嘿, 感谢您的答复!是的,我忘了提及他们是全文搜索。我关闭MySQL的原因是因为表锁定。全文功能需要myisam,它锁定了表,并因此伤害了我们每秒需要执行的数千个并发搜索。而且,全文搜索比其他选择更慢。我希望将MySQL与Sphinx配对可以解决这两个问题,但我不确定,这就是为什么我在这里发布:) 再次感谢! – 2010-08-15 04:24:57

8

存储数据和搜索是两回事。如果你看看像eBay这样的架构,他们有单独的服务&服务器进行搜索操作。 50米行不算什么,您可以将它与任何数据存储一起存储,但它们都不是完美的,所以区别在于用例。例如:cassandra在任何数据大小下都具有最快的插入性能,能够容易地扩展到数百个PB(无需分片),具有lucandra(cassndra-lucene集成,与海量数据相比具有很好的扩展性, ,高耐久性,... MongoDB有更多的查询选项(使用btree作为dbms),最近有自动裁剪,可以索引所有字段,但耐久性差,... Postgresql是最先进的开源dbms,有内置的主/从属复制最近,可以通过分片进行扩展,酸& sql兼容... couchdb在用例中与其他用户相比没有任何优势我认为,它的速度很慢,如果我需要酸,我可能使用postgresql。使用这些数据存储的内建fullText搜索功能存在一些问题,并且不可扩展。

开源的搜索引擎最具海报(海量数据,高性能,简单,分布式,容错,rest api)是elasticsearch,你可以把它想象成分布式的lucene。与elascticsearch相比,Solr是一种药物。原始lucene/sphinx的使用不可扩展。

如果我是你,我可能选择其中一个数据存储并使用elasticsearh进行索引,并在我的数据访问层上同步它们(需要修改db insert/update/delete上的索引)。

问候