用於位置數據探勘項目的 SQLite 或 CouchDB?
我目前正在設計一個數據探勘項目,我將在其中收集大量 Twitter 數據,以分析位置數據(地理編碼推文)並使用它進行一些機器學習。
我想要做什麼:我將有一些腳本在小型三星上網本(<2GHz,1GB RAM,200GB 磁碟)上執行 24/7,頻率僅受 Twitter API 查詢限制的限制。這些腳本將在數據庫中保存各種數據,然後將其用作分析數據的基礎。
我在 RDBMS 方面經驗豐富,因此我也知道它們的局限性。我剛剛閱讀了關於 CouchDB 及其在所謂的文件中儲存 JSON 的能力——這會派上用場,因為來自 Twitter API 的響應是 JSON 格式的,其中一些字元串非常嵌套和復雜。
另一方面,我真的不想錯過關係功能,因為我有一個表格
user
,它保存有關 Twitter 帳戶的一般數據和一個表格geo
,它保存總是引用特定user
.對於分析,
geo
會以任何可能的方式使用 的內容——我還沒有深入考慮過地理空間分析,但是會有聚合、距離計算等所有東西。這可以用 CouchDBreduce
在 Javascript 中的 -Functions 來完成,我讀到了嗎?如果我使用 SQLite DB,我會堅持使用 Python 並在那裡做所有事情。我真的不知道在 CouchDB 中有什麼可能,因為我對這個概念真的很陌生。我剛剛看到儲存 JSON 很容易,而且數據庫的結構根本不固定,所以我可以很容易地引入新類型的數據或銷毀舊類型的數據(在 SQLite 中無法使用 DROP COLUMN)。此外,由於我非常了解 Javascript(實際上比 Python 更好),因此對數據進行分析可能更容易。
你怎麼看?使用 NoSQL 做這類事情是否有顯著優勢,還是我應該堅持我能做的最好的事情?
我認為答案主要取決於你想花多少時間學習新數據庫與你想花多少時間學習機器學習。
例如 PostgreSQL 有很多內置的 GIS 東西,我認為它們可能對您的查詢非常有用。CouchDB 的 map/reduce 有很多有用的特性,但我發現它有點局限。如果您認為稍後將基於新算法添加許多列,您可能需要查看面向列的數據庫,例如Apache Cassandra。
但是,我建議將問題分為兩部分:
- 數據收集
- 數據分析
第一部分你似乎已經有了一個很好的計劃。我會編寫一個超級簡單的應用程序,它只會從 twitter 中提取數據並將其作為 BLOB 放入表中。或者只是磁碟上的一個文件。
當您擁有它時,您可以從原始數據中獲取並將其插入任何類型的後端。現在您可以根據您正在處理的目前問題(算法)選擇後端,而不是使用一種解決方案來解決您的所有問題。這裡的關鍵是準確提取您需要的數據。這樣,您就不必考慮數據嵌套在 Twitter 文件中的事實,因為您只需選擇所需的部分。如果您採用這種方式,我認為 RDBMS 會執行得非常好,因為它們可以執行各種查詢。
有道理?