在python,Dictionary或Mysql中有什么更好的?

时间:2010-10-10 14:47:47

标签: python mysql variables dictionary

什么会更快? 查询mysql以查看我需要的信息是否存在,或者 加载一个包含所有信息的python字典,然后检查id是否存在

如果python更快,那么最好检查id是否存在?

我正在使用python 2.4.3

我正在搜索标记在棋盘上的正方形的数据,即时搜索x& y。 每平方只有一个条目,信息不会改变,需要每秒调用几次。

谢谢!

完成

我发现它是python。我运行下面的代码,mysql在0.0003秒内完成了它,但是python在0.000006秒内完成了它,而mysql远远少于搜索和测试运行代码如何在现实生活中运行。哪一个拥有较少的CPU和RAM的开销,我永远不会知道,但如果速度是任何事情,python做得更好。

并且谢谢你的答案!

def speedtest():
 global search
 global data
 qb = time.time()
 search.execute("SELECT * FROM `nogo` where `1`='11' AND `2`='13&3'")
 qa = search.fetchall()
 print qa[0]
 qc =  time.time()
 print "mysql"
 print qb
 print qc
 print qc - qb

 data = {}
 for qa in range(15):
  data[qa] = {}
  for qb in range(300):
   data[qa][str(qb)] = 'nogo'
 qw = 5
 qe = '50'
 qb = time.time()
 print data[qw][qe]
 qc =  time.time()
 print "dictionary"
 print qb
 print qc
 print qc - qb

4 个答案:

答案 0 :(得分:4)

一般来说,如果您需要来自数据库的信息,询问数据库您需要什么。 MySQL(和其他数据库引擎)旨在尽可能高效地检索数据。

试图编写自己的检索数据的程序,试图超越那些已经为MySQL提供如此多数据处理能力的人才。

这并不是说从不适合将数据加载到Python中,但您应该确保数据库查询不是首先采用的正确方法。

答案 1 :(得分:1)

Python应该更快,但这在很大程度上取决于您的具体情况。

my_dict.has_key('foobar')

您也可以查看Bloom filters

答案 2 :(得分:0)

总的来说,我认为python更快但是: 它取决于1)你想要加载的表有多大(如果它太大而不能用python效率),2)你要执行多少函数调用(所以有时加载表更好到一个字典并在一个函数中执行所有查询。)

答案 3 :(得分:0)

我不能说MySQL的速度有多快(我缺乏公平地对其进行基准测试的技巧),但Python dict也具有非常优化的性能,并且不需要任何IO(而不是数据库查询)。假设(x_pos, y_pos)元组作为键,55 x 55字段(你提到3000条记录,55 ^ 2大约是3000条)。

>>> the_dict = { (x, y) : None for x in range(55) for y in range (55) }
>>> len(the_dict)
3025
>>> import random
>>> xs = [random.randrange(0,110) for _ in range(55)]
>>> ys = [random.randrange(0,110) for _ in range(55)]
>>> import timeit
>>> total_secs = timeit.timeit("for x,y in zip(xs, ys): (x,y) in the_dict",
    setup="from __main__ import xs, ys, the_dict", number=100000)
>>> each_secs = total_secs / 100000
>>> each_secs
1.1723998441142385e-05
>>> each_usecs = 1000000 * each_secs
>>> each_usecs
11.723998441142385
>>> usecs_per_lookup = each_usecs / (55*55)
>>> usecs_per_lookup
0.0038757019640140115

每次查询0.004微秒(!) - 祝你好运,选择DBMS;)但是因为你使用2.4,YMMV稍微。 不可否认,ints哈希的元组使得非常有效的键(整数(适合散列数据类型)散列给自己,元组只是哈希和xor它们的成员)。 此外,这并没有说明加载数据的速度有多快(尽管您可以使用pickle模块进行有效的序列化)。但是你的问题就像你加载一次数据然后处理一百万次一样。