3

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

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

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

4

6 回答 6

2

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

于 2011-08-18T18:39:01.707 回答
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 票根本不会分阶段进行,只要您在每次投票后都没有承诺。

于 2011-08-18T18:58:37.047 回答
2

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

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

于 2011-08-18T19:00:00.487 回答
1

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

于 2011-08-18T18:54:55.213 回答
0

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

于 2011-08-18T18:47:46.390 回答
0

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

于 2011-08-19T03:33:59.153 回答