2012-04-17 23 views
0

我有一个应用程序需要存储大量的数据(每天约20万txns),每个记录大小约为100 kb到200 kb。数据的格式将是JSON/XML。搜索使用Solr与地图减少文件 - 这是可靠的?

应用程序应该高度可用,因此我们计划将数据存储在S3或AWS DynamoDB上。

我们有用例可能需要根据几个属性(日期范围,状态等)搜索数据。大多数搜索将使用少数常见属性,但对于某些操作用例可能会有一些任意查询。

我研究搜索非关系型数据和方法迄今发现正在使用的大多数技术 1两种方式)建立索引(Solr的/ CloudSearch等) 2)运行一个Map Reduce作业(蜂巢/ Hbase等)

我们的要求是让搜索结果可靠(与S3/DB中的数据一致 - 类似于oracle查询,可以慢一点,但是当我们获取数据时,我们应该有与返回的查询相匹配的所有内容或者至少让我们知道某些结果被跳过)

从一开始,它看起来像基于索引的方法会比MR更快。但我不确定它是否可靠 - 索引可能是陈旧的? (有没有一种方法可以在我们进行搜索时知道索引已过时,以便我们可以纠正它?是否有办法让索引始终与DB/S3中的值一致?与Oracle DB上的索引类似)。 MR作业似乎总是可靠的(因为它从S3获取每个查询的数据),这个假设是否正确?无论如何加快这个查询 - 可能是S3中的分区数据,并根据每个分区运行多个MR作业?

+0

好像s3吞吐量对于map-reduce方法来说是个问题,对吗?每次查询都必须从s3中转出千兆字节? – 2012-04-17 23:11:57

+0

你尝试过Mongo DB吗?如果我理解你的要求,Mongo提供同样的事情。这是存储在文档中的一种Json,您可以按字段查询数据。 – 2012-04-18 12:34:58

+0

谢谢我将进一步评估MongoDB。 – Arvind 2012-04-18 17:36:30

回答

0

你可以<提交/ >和<优化/ > Solr索引后添加文件,所以我不确定陈旧的索引是一个问题。我设置了一个Solr实例,每天处理大约100,000个额外的文档。在我离职时,我们在索引中有140万份文件。它被用于内部报告,并且性能很高(最复杂的查询不到一分钟)。我刚问过一位前同事,一年之后它仍然很好。

虽然我不能说地图减少软件。

+0

我不是很关心查询花费时间,但如果它确保所有文档在运行搜索时都被编入索引,我应该没问题。有没有办法检查索引状态 - 索引了多少文档等? – Arvind 2012-04-18 17:37:44

+1

我相信有一个管理页面显示索引文档的数量。您还可以在所有字段和所有返回零行的内容上运行查询并检查行数。我认为(http)查询参数是这样的:?q = *:*&rows = 0然后返回XML或JSON。 – mqsoh 2012-04-18 20:25:24

0

例如,您应该考虑每周/月有一个Solr核心,这种方式更旧的核心将是只读的,并且更容易管理,并且很容易分散到多个Solr实例上。如果每天需要添加200k文档,那么您需要使用Solr分片或者Solr分片,但单个内核永远都不够用。