水平数据库和垂直数据库

时间:2009-12-02 04:52:24

标签: database social-networking gedcom

我正在一个社交网站上工作,其家庭树符合GEDCOM标准。我们需要决定是否应该为用户配置文件使用水平或垂直数据库结构。所以,我想知道是否有人可以回答何时使用水平数据库结构以及何时使用垂直数据库结构。

我找到了一些未确定字段的购物网站的答案:应使用垂直数据库结构。但我对家庭树网站的用途感到困惑。我应该使用垂直还是水平?

3 个答案:

答案 0 :(得分:8)

我假设您使用Mysql,Ms sql,Sqlite,Postgresql或Oracle等关系数据库进行存储?

Gedcom是信息交换的标准,因此您可以知道您将拥有多少列。也许标准在未来扩展了新属性,但它可能不会是很多新属性。您可以使用一些新列轻松扩展表。

我会使用'水平'表而不是entity-attribyte-value-system(垂直表)。垂直台系统往往很慢。它们无法正确编制索引并使查询优化器混淆。

当您的用户可以在他们的个人资料中定义新属性(如eye colo(u)r或者喜欢的colo(u)r)时,它就会变成另一个故事。您希望这些配置文件有多灵活?

答案 1 :(得分:3)

垂直数据库非常适用于detawarehousing和read / only报告。通常你会在一夜之间重新生成它们。他们的写入性能通常很差,但SELECT的速度要快10到100倍。

使用垂直数据库的典型方案是在创建(每日)数据快照然后对其运行查询时进行olap报告。大多数好处来自仅请求相对少量字段的查询,例如,当您从宽大表中选择少数字段时。这种针对数百万条记录的查询查询(例如计算SUM / COUNT / AVG)只需要一两秒钟。

您的案例似乎不适合垂直数据库。

答案 2 :(得分:0)

我同意tuinstoel,垂直表/ EAV系统不仅速度慢,而且还有一段时间非常复杂。有时需要编写一些自己的api方法来处理这些表,开发人员只处理这些方法以避免复杂性。

因此,如果您不需要添加更多字段,请使用水平表。但是,如果您要支持多语言功能,则可能需要使用不同的表。但我建议仍然坚持水平表。

我也正在开发一个涉及用户个人资料的网站,我正在使用水平表,如果将来需要不同的语言支持,那么我只会修改语言重要的字段。