我正在寻找一种NoSQL技术,该技术能够满足体面性能大规模处理地理空间和时间查询的要求。我想用提议的NoSQL技术和Spark批量处理几百GB到TB的数据。这显然将在具有多个节点的群集上运行。
我想要运行的查询类型:
我目前正在评估哪些技术可用于我的用例,但我已经被可用的大量技术所淹没。我曾考虑过像MongoDB和Cassandra这样的流行技术。两者似乎都适用于我的用例(Cassandra仅适用于Stratios Lucene索引),但可能有一种不同的技术可以更好地工作。
是否有任何技术会根据这些要求严重超越其他技术?
答案 0 :(得分:2)
我想将数百GB批量处理为TB数据
那不是真正的cassandra用例。 Cassandra首先针对写入性能进行了优化。如果你有大量的写作,Cassandra可能是你的好选择。 Cassandra不是探索性查询的数据库。 Cassandra是已知查询的数据库。在读取级别上,Cassandra针对sequentiell读取进行了优化。 Cassandra只能按顺序查询数据。它也可以忽略这一点,但不建议这样做。使用错误的数据模型,大量数据可能是Cassandra中的一个问题。也许基于hadoop的数据库系统对你来说是更好的选择。
时间查询,例如" date< = 01.01.2011"或"时间> = 11:00,时间< = 14:00"
Cassandra非常适合时间序列数据。
"正常"查询"字段< = value"
等属性
如果您在为数据库建模之前就知道了这些查询,那么Cassandra也是一个不错的选择。
所有三种查询类型的组合(例如"查询所有数据,其中位置在bbox内,日期为01.01.2011,时间< = 14:00,field_x< = 100&#34 ;)
Cassandra可能是一个很好的解决方案。为什么?正如我所说:在创建表之前,您必须知道这些查询。如果您知道在需要时间范围和位置(城市,国家,内容等)的情况下,您将有数以千计的查询,这对您来说是一个很好的解决方案。
大规模的时间查询,具有良好的性能。
Cassandra将在此用例中获得最佳性能。数据已按要求的顺序排列。 MonoDB是MySQL用例的一个很好的替代品。如果你需要更好的比例,但缩放mongodb并不像Cassandra那么简单,并且灵活而且你关心一致性。 Cassandra最终的一致性是可扩展的,性能非常重要。 MongoDB也有关系,Cassandra没有。在Cassandra中,一切都是非规范化的,因为性能关注。