- 簡單服務器與一個至強8個邏輯核心,16 GB的RAM,2×7200轉驅動器的mdadm RAID1。
- PostgreSql
- 需要處理大量數據。每天最多導入3000萬行數據。
- 時間 - 複雜查詢可以執行長達一個小時
簡化表的模式,那將是非常大的:
id| integer | not null default nextval('table_id_seq'::regclass)
url_id | integer | not null
domain_id | integer | not null
position | integer | not null
與上述模式的問題是,我不沒有關於如何分區的確切答案。 所有期間的數據將被使用(沒有查詢將有日期過濾器)。
我想過在「domain_id」字段上進行分區,但問題是很難預測每個分區將有多少行。
我的主要問題是:
確實是做,如果我不使用分區修剪感對數據進行分區,我不打算刪除舊數據?
那會是什麼優點/缺點?
如果我不進行分區,如何降低進口速度?
相關正常化的另一個問題:
如果URL被導出到另一個表?歸一化的
優點
- 表將不得不用的20-30字節平均大小的行。
- 加入的「url_id」應該是比「URL」欄中 非規範化
- 數據可以多進口,更快,因爲我不的
優點的速度快得多,在每次插入之前,不得不查找「url」表。
有人可以給我任何建議嗎?謝謝!
頭正常化,尾巴你不✔ –
根據你想要用這些數據做什麼,你可能會在硬件上有點動力不足 - 尤其是磁盤陣列。你需要仔細調整和設計你的工作流程纔有機會。不要誤解我的觀點,我們在PostgreSQL數據庫中擁有5TB數據的機器,每天都會有數千萬的請求出現,而且性能非常出色,但我們並沒有運行在一對7200 RPM的驅動器上。 – kgrittn