【问题标题】:Python data structure: SQL, XML, or .py filePython 数据结构:SQL、XML 或 .py 文件
【发布时间】:2009-01-13 07:10:34
【问题描述】:

在给定一个(或两个)500,000 项以上用于无向图搜索的字典的情况下,在 python 中存储大量数据的最佳方法是什么?

我一直在考虑一些选项,例如将数据存储为 XML:

<key name="a">
    <value data="1" />
    <value data="2" />
</key>
<key name="b">
...

或在 python 文件中直接访问:

db = {"a": [1, 2], "b": ...}

还是在 SQL 数据库中?我认为这将是最好的解决方案,但我是否必须更多地依赖 SQL 来进行计算而不是 python 本身?

【问题讨论】:

    标签: python sql xml data-structures graph


    【解决方案1】:

    Python 源代码技术绝对规则。

    XML 解析速度慢,而且相对难以被人们阅读。这就是像 Altova 这样的公司开展业务的原因——XML 编辑起来并不愉快。

    Python源码db = {"a": [1, 2], "b": ...}

    1. 解析速度快。

    2. 易于阅读。

    如果您的程序可以读写巨型字典,请使用pprint 进行写入,以便获得格式良好的输出。更容易阅读的东西。

    如果您担心可移植性,请考虑使用 YAML(或 JSON)来序列化对象。它们解析速度也很快,而且比 XML 更容易阅读。

    【讨论】:

      【解决方案2】:

      我会考虑使用可用于 python 的众多图形库之一(例如python-graph

      【讨论】:

        【解决方案3】:

        您需要更好地说明您的问题。我会做几个假设: 1)您的数据是静态的,您只想搜索它, 2) 你有足够的内存来存储它。

        如果应用程序启动速度不重要,数据格式由你决定,只要你能把它放入 Python 内存即可。如果您想快速访问数据,请使用简单的数据类型(字典、列表、字符串)来存储数据,而不是 XML 图。您可以考虑编写自己的轻量级类来表达节点并将链接存储到字典或数组中的其他节点。

        如果应用程序启动时间很关键,请考虑将数据加载到 Python 程序中并将其提取到文件中;然后,您可以在生产应用程序中加载腌制数据结构(应该非常快)。

        另一方面,如果您的数据太大而无法放入内存,或者您希望能够持久修改它,您可以使用 SQL 进行存储(外部服务器或 SQLite 数据库)或 ZODB ( Python 对象数据库)。

        【讨论】:

          【解决方案4】:

          如果您将数据存储在 XML 文件中,那么修改将更容易(即使用记事本...),但您必须考虑到从 XML 文件中读取和解析所有数据量是一项繁重的工作。 使用 SQL 数据库(可能是 PostGres)将使选择的性能更高一些,DMBS 比直接文件系统读取/解析更优化。 如果您将所有数据存储在一个单独的文件中的某个 Python 结构中,那么您可以拥有字节码编译 (.pyc) 的优势,它不会提高计算热量但允许更快的加载(这就是您想要的)。 我会选择最后一个。

          【讨论】:

            【解决方案5】:

            XML 确实面向树结构,而且非常冗长。您可以查看 RDF 以了解在 XML 中描述图形的方法,但它仍有其他缺点,例如读取、解析和实例化 500k+ 个对象的时间以及使用的文件空间量。

            SQL 真正面向描述表中的行。您当然可以存储图表,但您也会在此处看到性能损失。

            我会先尝试 python 酸洗,看看它是否满足您的需求。它可能是读取和实例化所有对象的最紧凑和最快的方法。

            真正使用其他格式的唯一原因是如果您需要他们提供的东西,例如SQL 中的事务或 XML 的跨语言处理。

            【讨论】:

              【解决方案6】:

              如果你有办法维护文件,python 文件方法肯定是最快的。

              【讨论】:

                猜你喜欢
                • 2014-04-30
                • 2020-09-16
                • 1970-01-01
                • 2011-02-23
                • 1970-01-01
                • 1970-01-01
                • 2012-07-16
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多