我需要创建一个系统来在Linux系统上存储python数据结构,但是需要对来自多个程序/守护进程/脚本的数据进行并发读写访问。我的第一个想法是,我将创建一个unix套接字,它将监听连接并将所请求的数据作为pickle python数据结构提供。客户端的任何写入都会同步到磁盘(可能是批量生成,但我不认为它是高吞吐量,所以只需Linux vfs缓存就可以了)。这确保只有一个进程读取和写入数据。
另一个想法是将pickle数据结构保留在磁盘上,只允许通过锁定文件或令牌进行单个进程访问......这要求所有访问客户端都要尊重锁定机制/使用访问模块。
我在看什么? SQLite可用,但我希望尽可能简单。
你会做什么?
答案 0 :(得分:1)
如果它可用,我会使用SQLite。
请参阅此常见问题:http://www.sqlite.org/faq.html#q5 - SQLite(使用pysqlite [0])应该能够优雅地处理您的并发。
如果您愿意,可以将数据保存为简单的键值对,无需在数据上使用所有BNF。
答案 1 :(得分:1)
如果您只想存储名称/值对(例如文件名到pickle数据),您可以随时使用Berkley DB(http://code.activestate.com/recipes/189060-using-berkeley-db-database/) 。如果您的数据是面向数字的,您可能需要查看PyTables(http://www.pytables.org/moin)。如果你真的想使用套接字(我通常会尽量避免这种情况,因为你需要担心很多细节)你可能想看看Twisted Python(适合通过Python处理多个连接而不需要线程)。
答案 2 :(得分:0)
我会使用数据库。一个真实的。这就是它们存在的原因(其中一个原因)。如果你不需要,不要重新发明轮子。
答案 3 :(得分:0)
将后端存储放在一边(这里有很多选项,包括ConfigParser,shelf,sqlite和anydbm),使用单个进程处理存储和其他连接到存储的想法可能是可用的。我首先想到的是Pyro(Python远程对象)。套接字虽然一直可用,但可能会变得棘手。
答案 4 :(得分:0)
您可以使用ConfigParser
序列化数据结构并将其存储为值。如果你创建了自己的访问lib /模块来访问数据,你可以在lib中进行序列化,这样客户端代码就可以发送和接收python对象。您还可以在lib中处理并发。