在python中存储大量数据的最佳方法是什么,给定一个(或两个)500,000项+字典用于无向图搜索?
我一直在考虑一些选项,例如将数据存储为XML:
<key name="a">
<value data="1" />
<value data="2" />
</key>
<key name="b">
...
或在python文件中直接访问:
db = {"a": [1, 2], "b": ...}
还是在SQL数据库中?我认为这将是最好的解决方案,但是我是否必须依靠SQL来进行计算而不是python本身?
答案 0 :(得分:6)
Python源技术绝对是规则。
XML解析起来很慢,人们相对难以阅读。这就是像Altova这样的公司开展业务的原因 - 编辑XML并不令人愉快。
Python源db = {"a": [1, 2], "b": ...}
是
快速解析。
人们容易阅读。
如果您有可以读写巨型词典的程序,请使用pprint
进行写入,以便获得格式良好的输出。更容易阅读。
如果您担心可移植性,请考虑YAML(或JSON)来序列化对象。它们也快速解析,并且比XML更容易阅读。
答案 1 :(得分:2)
我会考虑使用python中可用的众多图形库之一(例如python-graph)
答案 2 :(得分:1)
您需要更好地指定问题。我会做一些假设: 1)您的数据是静态的,您只想搜索它, 2)你有足够的内存来存储它。
如果应用程序启动速度不是很关键,那么数据格式由您决定,只要您可以将其放入Python内存中即可。如果要快速访问数据,请使用简单的数据类型(dicts,列表,字符串)来存储数据,而不是XML图形。您可以考虑编写自己的轻量级类来表达节点并将链接存储到dict或数组中的其他节点。
如果应用程序启动时间很重要,请考虑在Python程序中加载数据并将其挑出文件;然后,您可以在生产应用程序中加载pickle数据结构(应该非常快)。
另一方面,如果您的数据太大而无法容纳在内存中,或者您希望能够持久修改它,则可以使用SQL进行存储(外部服务器或SQLite数据库)或ZODB(一个Python对象数据库)。
答案 3 :(得分:0)
如果您将数据存储在XML文件中,则更容易修改(即使用记事本...),但您必须考虑从XML文件中读取和解析所有数据量是一项繁重的工作。 使用SQL数据库(可能是PostGres)会使选择更加高效,DMBS比直接文件系统读取/解析更优化。 如果您将所有数据存储在一个单独的文件中的某些Python结构中,那么您可以获得字节码编译(.pyc)的优势,它不会提高计算温度,但允许更快的负载(这就是您想要的)。 我会选择最后一个。
答案 4 :(得分:0)
XML实际上面向树结构,非常冗长。您可以查看RDF以了解用XML描述图形的方法,但它仍有其他缺点,例如:是时候读取,解析和实例化500k +对象以及使用的文件空间量。
SQL实际上是面向描述表中的行。你当然可以存储图表,但是你也会看到性能损失。
我会首先尝试python酸洗,看看它是否符合您的需求。它可能是最紧凑,最快速的读入和实例化所有对象。
使用其他格式的唯一原因是,如果您需要他们提供的内容,例如SQL中的事务或XML的跨语言处理。
答案 5 :(得分:0)
如果你有办法维护文件,那么python文件方法肯定是最快的。