gpt4 book ai didi

python - Python DBM 真的很快吗?

转载 作者:太空狗 更新时间:2023-10-30 01:45:10 24 4
gpt4 key购买 nike

我在想,Python 的原生 DBM 应该比 NOSQL 数据库(如 Tokyo Cabinet、MongoDB 等)快得多(因为 Python DBM 的功能和选项较少;即系统更简单)。我用一个非常简单的写/读示例进行了测试

#!/usr/bin/python
import time
t = time.time()
import anydbm
count = 0
while (count < 1000):
db = anydbm.open("dbm2", "c")
db["1"] = "something"
db.close()
db = anydbm.open("dbm", "r")
print "dict['Name']: ", db['1'];
print "%.3f" % (time.time()-t)
db.close()
count = count + 1

读/写:1.3s读取:0.3s写入:1.0s

MongoDb 的这些值至少快 5 倍。真的是 Python DBM 性能吗?

最佳答案

Python 没有内置的 DBM 实现。它的 DBM 功能基于广泛的 DBM 风格的第三方库,如 AnyDBM、Berkeley DBM 和 GNU DBM。

Python 的字典实现对于键值存储来说确实很快,但不是持久的。如果您需要高性能的运行时键值查找,您可能会发现字典更好——您可以使用 cpickle 或 shelve 之类的东西来管理持久性。如果启动时间对您很重要(如果您要修改数据、终止)——比运行时访问速度更重要——那么像 DBM 这样的东西会更好。

在您的评估中,作为主循环的一部分,您包括了 dbm open 调用和数组查找。打开一个 DBM 来存储一个值并在查找它之前关闭并重新打开是一个非常不现实的用例,并且您会看到以这种方式管理持久数据存储时典型的缓慢性能(它是效率很低)。

根据您的要求,如果您需要快速查找并且不太关心启动时间,DBM 可能是一个解决方案 - 但要对其进行基准测试,请仅在循环中包括写入和读取!像下面这样的东西可能是合适的:

import anydbm
from random import random
import time

# open DBM outside of the timed loops
db = anydbm.open("dbm2", "c")

max_records = 100000

# only time read and write operations
t = time.time()

# create some records
for i in range(max_records):
db[str(i)] = 'x'

# do a some random reads
for i in range(max_records):
x = db[str(int(random() * max_records))]

time_taken = time.time() - t
print "Took %0.3f seconds, %0.5f microseconds / record" % (time_taken, (time_taken * 1000000) / max_records)

db.close()

关于python - Python DBM 真的很快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com