存储增量数字的最佳方式是什么?

3
我正在为一个相对较大的网站实现投票系统,我在想应该把投票数存储在哪里。主要问题是,在主数据库中存储它们会给它带来很大的压力,因为MySQL不擅长处理大量简单的查询。
到目前为止,我最好的选择是使用memcached,因为它似乎非常适合这个任务(非常快速和面向键/值)。唯一的问题是,memcached是非持久性的,并且没有简单的保存这些值的方法。
有没有专门为此任务设计的东西,最好使用Python后端?

1
你有没有考虑过直接使用Python内置的sqlite数据库? - agf
我需要一个能够处理每分钟约4,000个投票的东西。 - Kristina Brooks
看看我的答案,快速进行SQLite基准测试。 - agf
6个回答

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个投票对其毫无影响。


2

你能接受一定程度的选票损失吗?如果可以,您可以采用混合方案。每当模数为100(10、某些数字)时,请使用当前 memcache 值更新 SQL 数据库。您还可以定期运行脚本进行扫描和必要的更新。


2

MySQL在处理大量简单查询时表现不佳

你可能在MySQL服务器上配置出了严重问题。MySQL应该能够轻松处理每分钟4000个查询。有基准测试显示,MySQL可以处理超过25k的INSERTs每秒。


1
你可以看一下CUBRID。虽然我没有亲自尝试过,但它看起来很有前途。他们宣传几乎100%的MySQL兼容性,还有一些不错的功能,如SELECT INCR(field)

0

Mongodb可以很好地工作。由于它可以更快,或者Google App Engine是为了可扩展性而设计的。


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

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