我们公司正在开发一个项目,该项目需要一个拥有3000万至5000万行产品数据的数据库.这些行包含需要每秒数千次搜索的文本.而且,每次搜索都需要不到一秒的时间来执行.
总而言之,我们有一个50M行数据库,每秒需要搜索数千次.请记住,这些是全文搜索.我知道MySQL或任何关系数据库本身都无法处理这类工作.因此,我们正在寻找可以为我们设计正确设置并帮助我们实施的人,以您指定的价格.
首先,我们想知道我们最好的选择是什么.我个人一直在研究诸如Sphinx,Lucene,Cassandra,MongoDB,CouchDB,Solr等的东西,但实际上不知道哪个应该与另一个一起使用,以便为我们提供最有效的设置.
所以,如果有人可以提供一些建议,或接受我们的工作机会,我们将不胜感激.
你可以在这里通过PM联系我,我会给你我的电子邮件/ IM /电话号码进一步讨论.
谢谢!
存储数据和搜索是两回事.如果你看一下像ebay这样的架构,他们就会有单独的服务和服务器来进行搜索操作.50米的行什么都没有,你可以将它与任何数据存储区一起存储,它们都不是完美的,所以区别在于用例.例如:cassandra具有任何数据大小的最快插入性能,可轻松扩展到数百台机器(无需分片),具有lucandra(cassndra-lucene集成,与弹性搜索相比,可以很好地扩展大量数据但是玩具),高耐用性...... MongoDB有更多的查询选项(使用btree作为dbms),最近有自动分类,可以索引所有字段,但很差耐用性,... Postgresql是最先进的opensource dbms,最近内置了主/从复制,可以通过分片,酸和sql兼容进行扩展...在一个用例中,couchdb没有任何优势我认为,它很慢,如果我需要酸,我可能会使用postgresql.这些数据存储的内置全文搜索功能存在一些问题且无法扩展.
最广泛的(海量数据,高性能,简单,分布式,容错,休息api)开源搜索引擎是弹性搜索,你可以把它想象成分布式lucene.与elascticsearch相比,Solr是一种传统.使用原始lucene/sphinx是不可扩展的.
如果我是你,我可能会选择一个数据存储区并使用elasticsearh进行索引并在我的数据访问层上同步它们(需要修改db insert/update/delete上的索引).
问候