2012-05-28 26 views
0

所以,看看我有什么。用于快速过滤的SQL数据库优化

短文本消息,以纯文本形式存储在数据库中,标记文本和html。对于标记的文本,标记嵌入到每条消息中。例如,我可以有以下标记的消息:

A [quick] [brown] fox jumps over a [lazy] dog. 

快速,布朗和懒惰 - 嵌入标签,在HTML 大胆风格中。任何用户都可以标记另一个标签,例如[狗]。发生这种情况,我需要刷新全部消息,用数据库中的一个字并使其成为标签无处不在

有成千上万的消息,所以我需要过滤必要的消息并更新它们(或者插入新的值),不管用户是否可以同时更改标签(也可以删除它们)。我正在考虑为这些需求设置一个辅助表,以保持搜索索引等信息的快速更新。当然,所有更改都是在其他几个用户批准后才应用的,仅用于保存订单。

有没有灵魂使搜索和更新过程更有效,或者我应该在这里选择别的东西?

如果有问题,我使用Ruby + MySQL。

回答

0

如果您绝对必须更新每封邮件,那么您除了强力改变他们之外别无选择。如果只有几千个,那么它会很快。但是,如果它增长到数百万,那么在每条消息中查找标签的时间可能会开始产生影响,除非您使用查询优化和/或使用后台更新线程玩游戏,正如您所提到的。 (或者更改为支持日志的时态数据库)

如果标签数量足够小,为什么不简单地维护表格中的标签列表,并且在检索每个消息时,通过标签表格传递每个潜在标签 (即对于消息中的每个单词,检查单词是否在标签表中)。如果短消息,这将是相当快速的,并且标签表可以被优化索引以帮助。

标记表的一个优点是,您可以创建一个消息标记1:M表充当反向索引,这将加快查询搜索的速度,但您的问题似乎并未涉及搜索性能。