首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于多实体高性能标签的数据库

用于多实体高性能标签的数据库
EN

Stack Overflow用户
提问于 2011-06-16 03:02:36
回答 1查看 354关注 0票数 2

我正在为一个社交应用程序设计一个数据库,并试图确定我的方法是否为: 1)性能良好,2)适当标准化?

我对标签查询性能和数据库设计的研究得出的结论是,具有全文索引搜索的单个标签表可以产生最佳性能。

看看这个:http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests

我知道我可以(也应该从纯规范化的角度)将标签放在一个单独的表中,每个标签有一个键,但随着db变大(根据链接的文章),性能会受到影响。标签搜索是我的应用程序的一个关键组件,必须有良好的表现。

下面的结构说明了我设计的一种使用桥元数据表的基本方法,我希望使用这个单独的表桥接更多的“对象表”,但我只提供了两个概念:

用户表: UserID主键、UserName等

博客表: BlogID PK、UserID FK、BlogTxt等

图片表: PhotoID PK、UserID FK、PhotoPath等

元数据表: MetadataID PK、UserID FK、ObjectTable (帖子或博客)、ObjectID FK (PostID或BlogID)、标签(tag1、tag2、tag3)

除了上面的问题,我还想知道是否有更好的替代方案。我是db设计的新手,所以请原谅我对正确的方式的严重的无知。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2011-06-16 04:36:04

我对标签查询性能和数据库设计的研究得出结论,带有全文索引搜索的单个标签表可以产生最好的性能。

这实际上是不正确的。

您可以获得的最佳性能是切换到具有数组类型和位图索引扫描的数据库引擎,使用触发器在int[] array列中维护标记的聚合,并在其上添加适当的索引(gin、gist、rtree)。

这允许编写查询(Postgres语法如下所示):

代码语言:javascript
复制
create index on posts using gin (tags);

-- bitmap AND/OR index scan on posts
-- has 1 or 2 or 3 or any of 4, 5, 6 without 7 or 8
select *
from posts
where tags && array[1,2,3]
or tags && array[4,5,6] and not tags && array[7,8]

上面的内容将打消你使用MySQL所能想到的任何潜在的优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6362879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档