比方說,我們有一個要求,以創建消耗的文檔的高容量,實時數據流的系統,並針對一組定義的用戶,這些文件匹配搜索查詢,因爲這些文件可用。這是一個前瞻性的,而不是回顧性的搜索服務。什麼是適當的持久性解決方案?的預期(不追溯)搜索數據庫解決方案
假設用戶希望看到的匹配他們的查詢的文檔活飼料 - 認爲谷歌快訊 - 和飼料必須顯示爲每個文檔的某些元數據。讓我們假設比賽的無限期壽命;即,系統將允許用戶從創建特定查詢的時間開始查看查詢的所有匹配。因此,流中的每個文檔的元數據以及文檔和與該文檔匹配的用戶查詢之間的關聯必須保存到數據庫中。
讓我們拋出另一個要求,即用戶希望能夠面向某些元數據:例如,用戶只想查看其元數據字段「結果類型」等於「博客」的特定查詢的匹配文檔, 「並且希望計算博客比賽的數量。
下面是一些假設性的數字:
200000新的數據文件每天都絡繹不絕。
- 每個文檔的元數據都會保留。
1000用戶提供約5個搜索查詢每個:約5000總用戶搜索查詢。
- 這些查詢是簡單的布爾查詢。
- 在每個新文檔進入時,將針對所有5000個查詢處理它,以查看哪些查詢匹配。
每個進料 - 一個用於每個用戶的查詢 - 被刷新到每分鐘用戶。換句話說,對於每個訂閱源,每分鐘都會執行一次針對數據庫查詢最近一次匹配頁面的查詢。
向用戶顯示飼料的速度至關重要。可擴展性和高可用性也非常重要。
用戶和查詢之間的關係是關係型的,如查詢和匹配文檔之間的關係,但文件的元數據本身只是鍵 - 值對。所以我最初的想法是將關係數據保存在像MySQL這樣的關係數據庫和NoSQL數據庫中的元數據中,但是在NoSQL數據庫中可以實現關係數據嗎?另外,構建一個feed將需要調用兩個獨立的數據存儲,這是額外的複雜性。或者可能將所有內容都推送到MySQL中,但這需要大量的連接和計數。如果我們將所有數據作爲鍵值對存儲在某種其他類型的數據存儲中,那麼我們將如何進行刻面?對於匹配多個搜索查詢的文檔,會有大量的冗餘元數據。
什麼樣的數據庫將很適合這種情況?我知道諸如Twitter Storm和雅虎的S4等工具可用於構建此類系統的整體架構,但我想關注數據庫,因爲數據存儲,數據量和查詢/刻面要求。
首先我相信這是SO的主題。 「購物清單」問題沒有明確的答案,所以我投票結束。其次,儘管每天新增200,000條記錄聽起來很多,但實際上並非如此。它十年只有730米,你只需要存儲元數據。另外,所有200k是「新」的機會是什麼......如果他們不是你所需要的就是有效的重複數據刪除。 – Ben