这些MySQL数据库设计随附中的哪一个最适合大多数读取高性能的数据库?

问题描述

| 我是MysqL数据库管理员和开发人员。我已经使用MysqL几年了。我最近购买并研究了O'Reilly高性能MysqL 2nd Edition,以提高我在MysqL高级功能,高性能和可伸缩性方面的技能,因为我常常因缺乏对MysqL的高级了解而感到沮丧(而且很大一部分原因是) , 我还有)。 目前,我正在从事一个模糊的Web项目。在这个项目中,我们将从一开始就拥有足够的内容用户。我是数据库的设计者,并且该数据库必须非常快(有些插入但大多数都是更重要的READS)。 我想在这里讨论这些要求: 将有几种物品 这些项目具有一些共同的领域和关系 这些项目还具有一些特殊的字段和关系,使它们彼此不同 这些项目将必须一起列出,并按公共字段或关系排序或过滤 这些项目也必须仅按类型列出(例如,序言item_specialA) 我对设计有一些基本的疑问,我希望您能帮助我确定和了解哪种设计方法对高性能MysqL数据库更好。 古典方式 下图显示了简单的方法,这是您在数据库中使用思维时可能首先想到的方法数据库图 集中方式 但是,也许我们可以使用一些或伪面向对象的范例来改进它,即将公共项目和一个公共项目表上的关系集中到一起。这对于列出所有项目也很有用:数据库图 每个人的优缺点? 看到以前的要求,您会选择哪种方式或要进行哪些更改? 提前谢谢大家!     

解决方法

        您拥有两种不同的数据映射策略。在其他来源中,您称为“经典”是“每个具体类一个表”,而您称为“集中”是“每个类一个表”(将对象映射到关系数据库:O / R详细映射)。它们都有其优点和缺点(按照上面的链接)。第一种策略中的查询将更快(第二种策略中,您只需要联接2个表,而3种则需要联接)。     ,        我认为您应该探索经典的超型/亚型模式。这是SO中的一些示例。     ,        如果您主要是为了提高速度,请考虑选择性地使用MyISAM表,使用集中化的“对象”表,以及仅一个具有此格式正确索引的附加表:
object_type | object_id | property_name | property_value
user        | 1         | photos        | true
city        | 2         | photos        | true
user        | 5         | single        | true
city        | 2         | metro         | true
city        | 3         | population    | 135000
依此类推...例如,在主键或索引键(object_type,object_id,property_name)上的查找将很快。此外,随着新属性的出现,您减少了以457表结尾的需要。 它不是一个设计合理的数据库,也不是一个规范化的数据库,如果您正在寻找一个长期的大型站点,则应考虑进行缓存,或者至少使用非规范化的范式,非规范化的mysql表,例如redis ,或者可能是MongoDB。