我以JSON的形式從我的數據庫中導出了一些數據,它基本上只有1個[list],其中有一大堆(900K)的{objects}。將95MB的JSON數組拆分成更小的塊?
試圖將其導入到我的生產服務器上,但我有一些便宜的Web服務器。當我吃完所有資源10分鐘時,他們不喜歡它。
如何將此文件分割成更小的塊,以便我可以逐塊導入它?
編輯:其實,這是一個PostgreSQL數據庫。我接受其他關於如何以塊的形式導出所有數據的建議。我已經在我的服務器上安裝了phpPgAdmin,該服務器據說可以接受CSV,標籤和XML格式。
我不得不修復phihag的腳本:
import json
with open('fixtures/PostalCodes.json','r') as infile:
o = json.load(infile)
chunkSize = 50000
for i in xrange(0, len(o), chunkSize):
with open('fixtures/postalcodes_' + ('%02d' % (i//chunkSize)) + '.json','w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
轉儲:
pg_dump -U username -t table database > filename
恢復:
psql -U username < filename
(我不不知道pg_restore做了什麼,但它給了我錯誤)
關於這方面的教程很方便地將這些信息留下,特別是,在大多數情況下可能需要的-U
選項。是的,手冊頁解釋了這一點,但篩選50個你不關心的選項總是很痛苦。
我結束了肯尼的建議......雖然它仍然是一個主要的痛苦。我不得不將錶轉儲到一個文件,壓縮它,上傳它,提取它,然後我嘗試導入它,但生產中的數據稍有不同,並且有一些丟失的外鍵(郵政編碼附加到城市)。當然,我不能僅僅導入新的城市,因爲那樣會拋出重複的關鍵錯誤,而不是默默地忽略它,這本來就不錯。所以我必須清空那張桌子,重複城市的過程,只有意識到別的東西與城市有關,所以我必須清空那張桌子。重新獲得城市,最後我可以導入我的郵政編碼。到目前爲止,我已經刪除了一半數據庫,因爲一切都與所有條目相關,並且我必須重新創建所有條目。可愛。好東西,我還沒有啓動該網站。也「清空」或截斷表似乎並沒有重置序列/自動增量,我想,因爲有一些神奇的條目,我想有ID 1.所以...我必須刪除或重置那些也(我不知道如何),所以我手動編輯爲那些回到1的PK。
我會遇到類似的問題與phihag的解決方案,再加上我不得不導入17文件一個時間,除非我編寫另一個導入腳本來匹配導出腳本。儘管他的確從字面上回答了我的問題,但謝謝。
pg_dump會很好....但是如果不在區塊中,還原可能會消耗太多的資源。我所做的所有輸出都是在我的生產服務器上導入的。 – mpen
我現在正在猜測領土,但我會認爲JSON方法中的高資源利用率將與JSON解析有關。但正如我所說,這是一個總的猜測。我會嘗試使用pg_dump和pg_restore方法來查看發生了什麼(當然在看資源的時候)) – Kenny
看起來是這樣的(現在可能很明顯我以前沒有使用過Postgres): - 僅限數據 只轉儲數據,而不是模式(數據定義)。 – Kenny