在Linux系统上存储Python数据

时间:2011-05-27 02:28:12

标签: python linux pickle data-storage

我需要创建一个系统来在Linux系统上存储python数据结构,但是需要对来自多个程序/守护进程/脚本的数据进行并发读写访问。我的第一个想法是,我将创建一个unix套接字,它将监​​听连接并将所请求的数据作为pickle python数据结构提供。客户端的任何写入都会同步到磁盘(可能是批量生成,但我不认为它是高吞吐量,所以只需Linux vfs缓存就可以了)。这确保只有一个进程读取和写入数据。

另一个想法是将pickle数据结构保留在磁盘上,只允许通过锁定文件或令牌进行单个进程访问......这要求所有访问客户端都要尊重锁定机制/使用访问模块。

我在看什么? SQLite可用,但我希望尽可能简单。

你会做什么?

5 个答案:

答案 0 :(得分:1)

如果它可用,我会使用SQLite。

请参阅此常见问题:http://www.sqlite.org/faq.html#q5 - SQLite(使用pysqlite [0])应该能够优雅地处理您的并发。

如果您愿意,可以将数据保存为简单的键值对,无需在数据上使用所有BNF。

[0] http://trac.edgewall.org/wiki/PySqlite

答案 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中处理并发。