【问题标题】:Best way of storing incremental numbers?存储增量数字的最佳方式?
【发布时间】:2011-08-18 18:33:39
【问题描述】:

我正在为一个相对较大的网站实施投票系统,我想知道应该在哪里存储投票数。主要问题是将它们存储在主数据库中会给它带来很大的压力,因为 MySQL 不太擅长处理大量简单的查询。

到目前为止,我最好的选择是使用memcached,因为它似乎非常适合这项任务(非常快速且面向键/值)。此解决方案的唯一问题是 memcached 是非持久性的,并且没有简单的方法来保存这些值。

是否有专门为此任务设计的东西,最好是带有 Python 后端?

【问题讨论】:

  • 你有没有想过只使用 Python 中内置的 sqlite 数据库?
  • 我需要每分钟可以处理大约 4,000 张选票的东西。
  • 查看我的答案以获得快速的 SQLite 基准测试。

标签: python memcached voting


【解决方案1】:

你能接受某种程度的选票损失吗?如果是这样,您可以做一个混合解决方案。每个模 100(10,某物),使用当前的 memcache 值更新 SQL 数据库。如果需要,您还可以定期扫描和更新脚本。

【讨论】:

    【解决方案2】:

    我刚刚运行了这个,基本上是文档中的 sqlite 示例,除了插入 5000 行:

    import time
    import sqlite3
    
    conn = sqlite3.connect('example')
    
    c = conn.cursor()
    
    # Create table
    c.execute('''create table stocks 
        (date text, trans text, symbol text, qty real, price real)''')
    
    print time.time()
    
    for i in xrange(5000):
    
        # Insert a row of data
        c.execute("""insert into stocks
                  values ('2006-01-05','BUY','RHAT',100,35.14)""")
    
    
    # We can also close the cursor if we are done with it
    # Save (commit) the changes
    conn.commit()
    c.close()
    
    print time.time()
    

    在我的笔记本电脑上十分之四秒

    大部分时间都花在了数据库提交上。因此,只要您不经常提交数据库(每隔几秒或更短一次),SQLite 就可以轻松处理 每秒 5000 票的负载。

    每分钟 4000 票根本不会分阶段进行,只要您在每次投票后都没有做出承诺。

    【讨论】:

      【解决方案3】:

      MySQL 不太擅长处理大量简单的查询

      您的 MySQL 服务器中可能存在严重错误配置。 MySQL 应该能够轻松地每分钟处理 4000 个查询。 MySQL 有每秒处理超过 25k INSERT 的基准。

      【讨论】:

        【解决方案4】:

        你可以看看CUBRID。我没试过,但看起来很有希望,他们宣传几乎 100% 兼容 MySQL,还有一些不错的东西,比如SELECT INCR(field)

        【讨论】:

          【解决方案5】:

          Mongodb 可以很好地工作。因为它可以更快或者Google App Engine 旨在扩展。

          【讨论】:

            【解决方案6】:

            如果您喜欢 memcached 但不喜欢它不持久化数据的事实,那么您应该考虑使用 Membase。 Membase 基本上是用 sqlite 作为持久层的 memcached。它非常易于设置并支持 memcached 协议,因此如果您已经设置了 memcached,则可以使用 Membase 作为替代品。

            【讨论】:

              猜你喜欢
              • 2011-11-26
              • 1970-01-01
              • 2023-04-08
              • 2012-10-18
              • 1970-01-01
              • 2010-10-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-29
              相关资源
              最近更新 更多