0

我有一个这样的数据结构:

{
    'key1':[
        [1,1,'Some text'],
        [2,0,''],
        ...
    ],
    ...
    'key99':[
        [1,1,'Some text'],
        [2,1,'More text'],
        ...
    ],
}

它的大小只有 100 个键和每个键中的 100 个列表。

我喜欢存储它并根据密钥检索它(整个列表)。这是在流量不是很高的网络服务器中使用的。但是,后端必须处理并发读取和写入。

如何以安全的方式做到这一点,而无需编写太多代码?

我想将腌制对象存储在 SQLite 中是一种可能的解决方案。

有没有更好的方法?

4

2 回答 2

0

答案是取决于瓶颈在哪里。如果您的进程受 I/O 限制(即它不会消耗大量 CPU 时间来处理您的所有请求),您应该研究像Twisted这样的事件驱动框架。在这种情况下,您可以将数据存储在普通字典中,因为在给定时间只有一个线程会访问它。

如果你的进程是 CPU 密集型的并且你想利用多核,你需要使用多个 Python 进程,因为每个 Python 进程都会持有一个 GIL(全局解释器锁)并且多个线程不能在同一个进程中执行 Python 代码同时。在这种情况下,一个非常简单的选择是使用共享存储,例如memcached

于 2012-04-09T16:18:19.163 回答
0

Python 泡菜不是为并发访问而制作的。如果您可以创建单个长寿命进程,则可以简单地使用内存结构进行操作,并使用单个 pickle 文件进行持久化。您需要确保捕获信号以确保写入泡菜文件!

更灵活的解决方案是 sqlite。sqlite 网页吹嘘说:“我们知道没有其他嵌入式 SQL 数据库引擎支持与 SQLite 一样多的并发性。” 这里的问题是您很可能会错误地进行数据库设计(无意冒犯)。我将创建一个“键”表和一个“列表”表(建议使用更有意义的名称!),外键从列表指向键。确保键有索引!

如果列表不是固定长度的,您应该创建第三个表来保存这些值,外键指向列表。

于 2012-04-09T16:21:14.083 回答