【问题标题】:Cassandra or MongoDB for good scaling and big amount of queriesCassandra 或 MongoDB 可实现良好的扩展性和大量查询
【发布时间】:2012-01-03 00:35:58
【问题描述】:

我有以下情况。对数据库有很多查询(通常是编写 cmets、读取配置文件等),而且,我认为读取比写入更多。我希望很有可能将数据库扩展到多台服务器。所以,我喜欢 nosql :) 据我了解,通过阅读有关 StackOverflow 的博客和问题答案(例如 this one),在这种情况下,最好的选择是使用 Cassandra。

所以,问题是 - Cassandra 是否更适合我的目的?为什么?

第二个问题是关于Tornado 的异步客户端库——你知道这方面的一些实现吗?正如您在上面链接的 wiki 页面上看到的,只有 mongodb 和 couchdb 的异步客户端。而这个事实也阻止了我。

也许我现在可以使用 MongoDB(因为存在异步库,并且可能第一次在多台服务器上比 Cassandra 更快,但没有异步),一段时间后将 mongo 中的数据转换为 cassandra。你怎么看?

【问题讨论】:

  • AFAIK 没有在 Tornados IOLoop 中运行的定制(异步)Cassandra 库。 (ps 阅读 Bens 关于线程的帖子:github.com/facebook/tornado/wiki/Threading-and-concurrency
  • 谢谢你的链接!您如何看待 - 使用不带异步的 Cassandra 会比带异步模块的 MongoDB 更快。或者可能差异很小 - 我将有时间编写自己的异步实现。也许我可以简单地运行一个特殊的线程进行数据库交互,它将与 Tornado 的线程进行通信。
  • Tornado 支持 twisted,这意味着您可以使用 async telephus twisted 库来支持异步 Cassandra。

标签: python mongodb asynchronous cassandra tornado


【解决方案1】:

一半的答案 - 因为这与适用性无关。 Tornado 2.1 支持将 twisted 作为异步模式,这意味着您可以使用 telephus Cassandra 库 (twisted+Cassandra) 进行异步 Cassandra 访问。

    import tornado.platform.twisted
    from telephus.pool import CassandraClusterPool
    from twisted.internet import reactor

    tornado.platform.twisted.install()

    from twisted.internet import reactor

    pool = CassandraClusterPool([HOST], keyspace='XXXX', reactor=reactor)

    pool.startService()

    reactor.run()        # this calls tornado.ioloop.IOLoop.instance().start() 

也就是说,我目前在一些个人项目中使用 MongoDB 和 mongoengine(非异步),在工作项目中使用 Cassandra+telephus。我在灵活数据模型与固定数据模型和性能方面进行权衡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2019-11-11
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多