【问题标题】:Storing Python data on a Linux system在 Linux 系统上存储 Python 数据
【发布时间】:2011-05-27 02:28:12
【问题描述】:

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

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

我在看什么? SQLite 是可用的,但我想让它尽可能简单。

你会怎么做?

【问题讨论】:

  • 是什么样的数据?
  • 配置数据;各种系统东西的设置。
  • 是的,看起来 SQLite 将是最简单的方法,而且绝对比大多数自制软件更可靠。

标签: python linux pickle data-storage


【解决方案1】:

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

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

如果愿意,您可以将数据保留为简单的键值对,无需对数据进行所有 BNF。

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

【讨论】:

    【解决方案2】:

    如果您只想存储名称/值对(例如文件名到腌制数据),您始终可以使用 Berkley DB (http://code.activestate.com/recipes/189060-using-berkeley-db-database/) .如果您的数据是面向数字的,您可能需要查看 PyTables (http://www.pytables.org/moin)。如果您真的想使用套接字(我通常会尽量避免这种情况,因为您需要担心很多细节),您可能需要查看 Twisted Python(非常适合通过 Python 处理多个连接而无需线程)。

    【讨论】:

      【解决方案3】:

      我会使用数据库。一个真实的。这就是它们存在的原因(嗯,原因之一)。如果没有必要,不要重新发明轮子。

      【讨论】:

      • 这适用于嵌入式系统 - sqlite 是唯一的选择。如果可能的话,我尽量避免将我的对象转换为关系数据库
      【解决方案4】:

      抛开后端存储(这里有很多选项,包括 ConfigParser、shelf、sqlite 和 anydbm),使用单个进程处理存储和其他连接到它的想法可能是可用的。我这样做的第一个想法是Pyro(Python 远程对象)。套接字虽然始终可用,但可能会变得棘手。

      【讨论】:

      • 这看起来令人兴奋!我得研究一下——它是纯 Python 吗? (交叉编译基于 C 的 python 模块是一种痛苦)
      【解决方案5】:

      您可以使用ConfigParser 序列化数据结构并将它们存储为值。如果您创建了自己的访问库/模块来访问数据,则可以在库中进行序列化,以便客户端代码只发送和接收 python 对象。您还可以在库中处理并发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 2012-08-14
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多