我目前使用的是mysql。我發現我的模式變得非常複雜。我試圖找到一個新的數據庫,以滿足我的需求:db適合我嗎?
讓我們假設我正在構建一個新聞聚合器(從多個網站收集新聞)。然後我運行算法來確定來自不同網站的兩條新聞是否實際上指向同一主題。我運行這個算法來一起聚合新聞。關係如下:
cluster
\--news1
\--word1
\--word2
\--news2
\--word3
\--news3
\--word1
\--word3
然後我會運用一些魔法並確定每個單詞的重要性。總結每個單詞的所有重要性都會給我一篇新聞文章的重要性。總結每篇新聞文章的重要性,給我一個集羣的重要性。
請注意,上面的集羣也有子組(如按區域分割等)和類別(如體育等),我必須確定在特定的一天本身的重要性。
我已經用過去的觀點去做,但是我意識到觀點非常緩慢。所以我通常會在實際的表格中插入一個插入索引來獲得更好的性能。正如你所看到的,這會導致衍生出像表(集羣,重要性),(新聞,重要性),(單詞,重要性)等多個表格,這些表格會變得非常混亂。
此外,「重要性」指標也會改變。變更表格,更新數據(我正在使用TRUNCATE TABLE)然後從空白處插入變得越來越困難。
我目前正在研究像Mongodb這樣的模式。我不需要分佈式。我非常想要一些相當快的東西(可以編入索引),而且這種東西比傳統的RDMBS更加靈活。
新
按照要求由不同的人,我會後我使用這個數據庫(它們不是實際的SQL查詢,因爲我希望大家在這裏可以理解)
TABLE word (word_id, news_id, word)
TABLE news (news_id, date, site ..)
TABLE clusters (cluster_id, cluster_leader, cluster_name, ...)
TABLE mapping_clusters_news(cluster_id, news_id)
TABLE word_importance (word_id, score)
TABLE news_importance (news_id, score)
TABLE cluster_importance(cluster_id, score)
TABLE group_importance(cluster_id, score)
您可能會注意到TABLE_word有一個額外的news_id列。這是爲了與TABLE_word_importance列相對應,因爲同一個詞在不同的文章中可能具有不同的重要性(如果您熟悉tfidf,基本上就是這樣)。
所有「重要性」表現在通過平均下面所有子實體的重要性來計算每個實體的重要性。這意味着,每個集羣的重要性是它裏面的所有的新聞,每條新聞的重要性是所有裏面等字樣確定確定
TYPICAL USAGE:
1) SELECT clusters FROM db THAT HAS word1, word2, word3, .. ORDER BY cluster_importance_score
2) SELECT words FROM db BELONGING TO THE CLUSTER cluster_id=5 ODER BY word_importance score.
3) SELECT groups ordered by importance score.
正如你所看到的,我獲得了很多得分從每層,並且有人告訴我爲此目的使用物化視圖(postgresql支持它)。然而,正如你所看到的,這個簡單的模式已經由8個表組成(我的實際數據庫由26個垃圾表組成,這爲維護增加了很多額外的複雜層次)。
注意這不是關於全文搜索。
什麼數據庫適合你?那要看。你是什麼數據類型? – bta 2010-05-21 19:40:14
向我們展示了您的模式和一些帶解釋計劃的示例查詢,然後我們可以確定它是您的設計還是數據庫出錯。 – 2010-05-22 07:08:35