簡體   English   中英

Python數據結構:SQL,XML或.py文件

[英]Python data structure: SQL, XML, or .py file

在一個(或兩個)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源技術絕對是規則。

XML解析起來很慢,人們相對難以閱讀。 這就是像Altova這樣的公司開展業務的原因 - 編輯XML並不令人愉快。

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

  1. 快速解析。

  2. 易於人們閱讀。

如果您有可以讀寫巨型詞典的程序,請使用pprint進行寫入,以便獲得格式良好的輸出。 更容易閱讀的東西。

如果您擔心可移植性,請考慮YAML(或JSON)來序列化對象。 它們也可以快速解析,並且比XML更容易閱讀。

我會考慮使用python中可用的眾多圖形庫之一(例如python-graph

您需要更好地指定問題。 我會做一些假設:1)你的數據是靜態的,你只想搜索它,2)你有足夠的內存來存儲它。

如果應用程序啟動速度並不重要,那么數據格式由您決定,只要您可以將其放入Python內存中即可。 如果要快速訪問數據,請使用簡單的數據類型(dicts,列表,字符串)來存儲數據,而不是XML圖形。 您可以考慮編寫自己的輕量級類來表達節點並將鏈接存儲到dict或數組中的其他節點。

如果應用程序啟動時間至關重要,請考慮將數據加載到Python程序中並將其挑選到文件中; 然后,您可以在生產應用程序中加載pickle數據結構(應該非常快)。

另一方面,如果您的數據太大而無法容納在內存中,或者您希望能夠持久修改它,則可以使用SQL存儲(外部服務器或SQLite數據庫)或ZODB(Python對象)數據庫)。

如果將數據存儲在XML文件中,則更容易修改(即使用記事本...),但您必須考慮從XML文件中讀取和解析所有數據量是一項繁重的工作。 使用SQL數據庫(可能是PostGres)會使選擇更加高效,DMBS比直接文件系統讀取/解析更優化。 如果您將所有數據存儲在一個單獨的文件中的某些Python結構中,那么您可以獲得字節碼編譯(.pyc)的優勢,它不會提高計算溫度,但允許更快的負載(這就是您想要的)。 我會選擇最后一個。

XML實際上是面向樹結構的,並且非常冗長。 您可以查看RDF以了解在XML中描述圖形的方法,但它仍然有其他缺點,例如,讀取,解析和實例化500k +對象的時間以及使用的文件空間量。

SQL實際上是面向描述表中的行。 你當然可以存儲圖表,但是你也會看到性能損失。

我會先嘗試python酸洗,看看它是否符合你的需求。 它可能是最緊湊,最快速的讀取和實例化所有對象。

真正使用其他格式的唯一原因是,如果您需要它們提供的東西,例如SQL中的事務或XML的跨語言處理。

如果你有辦法維護文件,那么python文件方法肯定是最快的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM