我正在为一个相对较大的网站实施投票系统,我想知道我应该在哪里存储投票数。主要的问题是将它们存储在主数据库中会给它带来很大的压力,因为MySQL并不擅长处理大量简单的查询。
到目前为止,我最好的选择是使用memcached
,因为它似乎非常适合这项任务(非常快速且以键/值为导向)。此解决方案的唯一问题是memcached
是非持久性的,并且没有简单的方法来保存这些值。
是否有针对此任务专门设计的内容,最好是使用Python后端?
答案 0 :(得分:2)
你能接受一定程度的投票损失吗?如果是这样,您可以进行混合解决方案。每个模100(10,某事),使用当前memcache
值更新SQL数据库。如果需要,您还可以定期扫描和更新脚本。
答案 1 :(得分:2)
我刚刚运行了这个,除了插入5000行之外,它基本上是文档中的sqlite
示例:
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票就不会分阶段。答案 2 :(得分:2)
MySQL并不擅长处理大量简单的查询
您的MySQL服务器中可能存在严重错误配置的内容。 MySQL应该能够轻松地每分钟处理4000个查询。有一些MySQL的基准测试每秒处理超过25k的INSERT。
答案 3 :(得分:1)
您可以查看CUBRID。我没有尝试过,但看起来很有希望,他们宣传几乎100%的MySQL兼容性,还有一些很好的东西,比如SELECT INCR(field)
答案 4 :(得分:0)
Mongodb
可以很好地工作。因为它可以更快或Google App Engine
被设计为可扩展。
答案 5 :(得分:0)
如果您喜欢memcached但不喜欢它不会保留数据这一事实,那么您应该考虑使用Membase。 Membase基本上是用sqlite作为持久层的memcached。设置和支持memcached协议非常简单,因此如果您已经设置了memcached,则可以使用Membase代替。