我正在考虑处理大量数据(例如 > 10 G)的概念验证,这需要每秒至少 200+ 次写入,以及每秒大约 50+ 次读取空间相关数据。这也是一个不断增长的系统。目前,出于性能原因,我正在考虑将这些大容量数据移动到 NoSql 大表类型的数据库中。
我考虑并仔细研究了 MongoDB 和 cassandra。就我的阅读而言,
MongoDB: - 似乎有写入器锁定问题 - 如果不需要多个服务器,stackoverflow 中的一篇文章建议使用此数据库 - 索引保存在内存中。所以指数增长越大,据说表现就会恶化 - 优点是 Mongodb 直接支持空间数据和索引以及查找附近位置等功能, - 我看到这篇文章 Cassandra Or MongoDB For Our Location Based Application 建议 mongodb 作为最佳选择
卡桑德拉:
- 似乎是相关数据库中最好的
- 似乎具有出色的写入和读取性能
- 本身不支持空间索引,但这可以通过地理哈希扩展
我实际上很喜欢 mongodb,因为它有很好的文档和对空间数据的直接支持。有没有人在这么大的系统中使用 mongodb 时有过不好的经历?我实际上看到很多关于 mongodb iostat 性能的帖子。
如果 mongodb 不适合,有人可以提供一些关于使用 cassandra 进行 geohashing 的指示吗?我看到了用于创建哈希值的链接 http://code.google.com/p/geospatialweb/ 。但还有如何查询等问题?
我意识到这是一个较旧的问题,我知道它不能直接回答您的问题,但根据您的查询,Cassandra 可能不是最佳选择,并且让您的查询与 MongoDB 中的索引一起使用也可能会出现问题(以我自己的经验)。 Mongo 在处理大量地理数据和查询方面比 Cassandra 稍有优势。
我建议还考虑考虑 ElasticSearch,这取决于您的数据形状和您将进行的查询类型可能是最好的解决方案。 不过,当您发布问题时,它的选择可能比今天要少。
tl;博士
Elassandra Cassandra 和 ElasticSearch 的组合。
未来的一点更新。
我目前正在创建大数据实时系统的概念,还需要存储地理空间数据并进行大规模查询。最近几天,我做了很多研究如何正确排列数据并能够支持地理空间索引和像边界框这样的查询。
我读到的第一个是 PostgreSQL + Postgis,但最大的实例限制为最大 200k 写入/秒。
第二个是地理空间数据库Tile38,它能够扩展查询,但不能扩展写入。唯一的方法是手动分割数据。
第三个是 MongoDB,因为在那里你可以找到支持我需要的地理空间功能的良好文档,但很难决定是否能够扩展写入。
所以最后一个数据库是 Cassandra。该数据库以水平写入扩展和故障接管而闻名。 Cassandra 的缺点是,查询数据的性能不佳,并且不支持开箱即用的地理空间。对于大规模查询数据,ElasticSearch 是一个很好的解决方案,正如 Tracker1 已经建议的那样。今天,我发现了一个由 Cassandra 和 ElasticSearch 组成的新数据库,称为 Elassandra,它允许大规模写入,并且还可以近乎实时地大规模读取数据。到目前为止,对我来说这是最好的解决方案,只需最少的设置和维护工作。
尝试 Cassandra + Solr。 这可能有用: http://digbigdata.com/geospatial-search-cassandra-datastax-enterprise/
问候, 古萨姆·库马尔
我们目前也使用 Cassandra 并寻找空间索引解决方案。我们使用 Lucene 来提供全文和属性搜索,并支持空间索引。也许您也想检查一下。
我们当前的实现看起来像是基于一个简单的树(基于网格)对信息进行分片,每个分片都是一个 Lucene 索引,一旦它增长超过一定大小,索引就会被 x 或 y 分割。由于这样的分片具有二进制表示形式(网格中的位置由两位组成,下一级接下来的 2 位,依此类推),因此搜索由位置发出,并将由任何带有位置/网格分辨率的分片帽前缀来回答。简单的系统到目前为止运行良好,但目前尚未有效使用。