首页 文章

Cassandra或MongoDB我们基于位置的应用程序

提问于
浏览
14

我们正在考虑将NoSQL数据库系统用于大型项目 . 目前,我们已经阅读了一些有关MongoDB和Cassandra的内容,尽管我们对这两者都没有任何经验 . 我们非常精通传统的关系数据库,如MySQL和Microsoft SQL,但NoSQL(键/值存储)对我们来说是一个新的范例 .

基本上,你们推荐哪些NoSQL数据库供我们使用?

我们做重写和读 . 基本上我们有成千上万的设备报告:

device_id(int),纬度(十进制),经度(十进制),日期/时间(datetime), Headers char(2),speed(int)

每一分钟 . 因此,在高峰时段,我们需要能够每秒处理数百次写入 .

然后,我们还有用户,它们以形式查询此信息,在最后一天或上周向我提供来自device_id 1234的所有消息 . 此外,用户进行其他查询,例如,给我来自device_1234的所有消息,其中速度大于50且日期为今天 .

因此,我们最初的想法是MongoDB或Cassandra将允许我们使用传统数据库更容易扩展 .

MongoDB或Cassandra中的文档或值可能如下所示:

{
   device_id: 1234,
   location: [-118.12719739973545, 33.859012351859946],
   datetime: 1282274060,
   heading: "N",
   speed: 34
}

你们推荐哪个系统?非常感谢 .

5 回答

  • 0

    MongoDB内置了对地理空间索引的支持:http://www.mongodb.org/display/DOCS/Geospatial+Indexing

    例如,您可以找到距离该位置最近的10台设备

    db.devices.find({location: {$near: [-118.12719739973545, 33.859012351859946]}}).limit(10)
    
  • 15

    我使用MongoDB发布了基于位置的应用程序,就像您描述的那样 . MongoDB具有强大的查询和索引支持,可能会为您提供更好的选择 . 就像Cassandra一样,MongoDB具有分区和复制功能,用于扩展读写 . 他们的底层架构非常不同 .

    虽然您没有提到任何基于位置的查询,但如果您对“给我位置l的半径r内以及时间t1和t2之间的所有设备”这样的查询感兴趣,您会发现MongoDB的地理空间查询和索引非常有用 .

  • 1

    我已经完成了mongodb和地理空间数据的一些工作,但不是上面提到的规模 . 地理空间搜索速度非常快,远远超过mysql .

    我建议查看mongodb的分片,复制和群集功能来处理写入量 . 对设备标识符进行分片可能是处理写入卷的好方法 . 如果您对事件的接近感兴趣,那么在lat / lng之间进行分片可能更合适 .

    插口

  • 0

    使用mongodb进行地理位置搜索 . 版本2.4改进了核心地理功能 . 很多大型网站都使用它进行地理定位搜索 .

  • 0

    您可以考虑使用ElasticSearch . ES保存原始文档的JSON以及所有索引字段 . JSON可以实例化为任何现代语言变量/参数 . 在Java中,甚至可以禁用它,并将本机Java持久性数据存储在字段中 . 搜索检索后,只需循环并实例化原始对象类型的集合 .

    使用Elastics Search为高速数字范围索引提供Trie索引,显然您可以在AND或OR过滤中获得每种风格和地理边界框查询的全文搜索 . 日期搜索也是原生的(尽管Java的日期处理很糟糕,所以我切换到时间戳的BIG INT表示来表示日期)

    UNLIKE过去和现在的NoSQL解决方案,地理索引和查询是任何查询的一部分,不需要额外的步骤 . I.E.,最近一个MongoDB解决方案需要进行地理空间搜索以收集符合标准的文档ID,然后您在另一个查询中使用这些ID并在这些ID中搜索其他标准 . 实际上,无论如何,这都是在所有解决方案中发生的事情,但它在ElasticSearch中更快并缓存 .

相关问题