Cassandra或MongoDB用于良好的扩展性和大量查询

5
我有以下情况。有很多查询数据库(通常是写评论,读取个人资料等...),我认为会有更多的读而不是写。我想要有一个良好的扩展数据库到多个服务器的可能性。因此,我喜欢nosql :) 通过阅读博客和在StackOverflow上回答问题(例如this one),我了解到在这种情况下最好的选择是使用Cassandra。
所以,问题是 - Cassandra是否更适合我的目的?为什么?
第二个问题将是关于Tornado的异步客户端库 - 您是否知道一些实现?正如您在上面链接的维基页面中所看到的,只有mongodb和couchdb有异步客户端。这个事实也阻止了我。
也许我现在可以使用MongoDB(因为异步库存在,可能在几台服务器上比Cassandra快,但没有异步),并在一段时间后将数据转换为Cassandra。你对此有什么看法?

1
据我所知,目前没有专门为Tornados IOLoop设计的(异步)Cassandra库。(请参阅Ben关于线程的文章:https://github.com/facebook/tornado/wiki/Threading-and-concurrency) - Schildmeijer
谢谢提供链接!你觉得使用没有异步处理的Cassandra会比使用带有异步模块的MongoDB更快吗?或者差异可能很小,这样我就有时间编写自己的异步实现。也许我可以简单地运行一个特殊的线程来处理数据库交互,并与Tornado的线程通信。 - Dmitry Belaventsev
Tornado支持Twisted,也就是说你可以使用异步Telephus Twisted库来实现异步Cassandra支持。 - koblas
1个回答

3

半个答案 - 因为这不是关于适用性的问题。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。在可灵活调整的数据模型与固定数据模型以及性能之间做出了妥协。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接