2013-10-31 64 views
0

我最近在Python中選擇了編程,並且正在創建數據庫。搜索數百萬個JSON文件的最佳方式是什麼?

我已經制定出從他們的源提取所有這些文件,所以他們都在我的電腦上的目錄。

所有這些文件結構相同的方式,我想要做的就是搜索這些多維詞典,並找到一組特定的鍵的值。

這些JSON文件全部結構相似,

{ 
"userid": 34535367, 
"result": { 
    "list": [ 
     { 
      "name": 264, 
      "age": 64, 
      "id": 456345345 
     }, 
     { 
      "name": 263, 
      "age": 42, 
      "id": 364563463456 
     } 
    ] 
} 

}

在我的情況,我想搜索「姓名」鍵和返回相關的數據(質量,標識和原始用戶標識符)成千上萬的名稱,就像它從我的數百萬個JSON文件中獲得的一樣。

基本上我很新,並且我擁有的小編程知識是Python。我很高興開始學習我需要的任何東西,但我不確定要走向哪個方向。

+0

有沒有任何理由爲什麼這些數據是以百萬計的JSON文件而不是一個合適的數據庫? – NullUserException

+0

我不得不通過網絡API調用所有它,現在濾出了大概1億個選項,現在我有200萬個文件。 – user2942213

+1

根據您不得不查詢和更新數據的頻率,最好將其插入數據庫。 – NullUserException

回答

1

作爲一個建議,爲什麼不處理所有傳入的文件並將數據插入到數據庫中?你將有一個工具集來查詢該數據庫。 SQLite的例如會做(以及任何其他更復雜的數據庫): http://www.sqlite.org/ http://docs.python.org/2/library/sqlite3.html

簡單其他的解決辦法是建立一個文件映射name_id to /file/path。然後,您可以通過名稱ID以對數方式執行二分搜索。但我仍然建議使用適當的數據庫,因爲維護索引比做一些插入/刪除更麻煩。

+0

使用另一個數據庫創建數據庫似乎是多餘的:) –

+0

@lcfseth他現在沒有任何數據庫。只是json文件。 – Izkata

+0

我並沒有真正想到這一點,說實話,我仍然只是瞭解所有的選擇。我沒有權限下載整個數據庫,因此創建另一個數據庫可能是一條可行的路。我只是想到了第1步,獲取數據。步驟2,搜索數據,但我開始看到可能性 – user2942213

2

如果你的目標是創建一個數據庫,那麼你應該看看上的數據庫是如何工作和解決您試圖立刻解決:)

NoSQL數據庫(如mangodb)同樣的問題與JSON文件也行並實現最有可能的一整套工具來搜索和過濾文檔。

現在要回答你的問題,除非你做一些預處理,這意味着你存儲了關於數據的不同信息(稱爲元數據),否則沒有快速的方法去做。 這是一個很大的問題,我沒有足夠的專業知識給你所有的答案,但我可以給你一個簡單的提示:使用索引。

索引是一個排序的鍵/值映射,其中對於每個值,我們存儲包含該值的文檔(或文件+ Json文檔的位置)。例如,對於名稱屬性的索引將是這樣的:

{ 
263: ('jsonfile10.json', '0') 
264: ('jsonfile10.json', '30'), 
# The json document can be found on the jsonfile10.json file on line 30 
} 

通過保持爲最查詢值的指數,你可以把線性時間搜索到對數時間搜索何況插入一個新的文檔快多了。在你的情況下,你似乎只需要名稱字段上的索引。

創建/更新索引是在插入,更新或刪除文檔時完成的。使用平衡二叉樹可以加速索引上的更新。

相關問題