我目前使用的是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