5

给定一个(或两个)用于无向图搜索的 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 本身?

4

6 回答 6

6

Python 源代码技术绝对规则。

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

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

  1. 快速解析。

  2. 便于人们阅读。

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

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

于 2009-01-13T11:37:45.170 回答
2

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

于 2009-01-13T07:36:51.177 回答
1

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

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

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

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

于 2009-01-13T07:41:14.990 回答
0

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

于 2009-01-13T07:41:16.457 回答
0

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

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

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

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

于 2009-01-13T07:47:53.213 回答
0

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

于 2009-01-13T07:48:24.307 回答