|
|
1
4
我强烈推荐这种方法。因为您可能正在为oltp和olap使用相同的数据库,所以通过添加一些星星和雪花可以获得显著的性能优势。 我有一个社交网络应用程序,目前在65桌。我维护一个表来跟踪对象(blog/post、forum/thread、gallery/album/image等)视图,另一个表用于对象推荐,第三个表用于汇总十几个其他表中的插入/更新活动。 我做的一件事稍有不同,那就是维护一个entity_type表,并在object_type列(在您的例子中是table列)中使用它的id。您可能希望对事件类型表执行相同的操作。 澄清alix -是的,您为对象维护一个引用表,为事件维护一个引用表(这将是您的维度表)。事实表将包含以下字段:
|
|
|
2
3
这看起来是一个相当合理的设计,所以我只是想挑战你的一些假设,以确保你有具体的理由做你正在做的事情。
这些都是从现有数据中得到的统计数据,不是吗?( 更新 :好吧,它们不是,所以忽略下面的内容。)为什么这些不只是视图,甚至是具体化视图? 然而,收集这些统计数据似乎是一项缓慢的工作:
我想你是在说用户(只需选择一个表)事件是如何从用户数据中分离出来的,而这些事件是非常不稳定的。我同意它应该是分开的,但更多的是因为它是根本不同的数据。一个人是什么和一个人做什么是两件不同的事情。 我不认为波动性那么重要。dbms应该已经允许您将日志文件和数据库文件放在不同的设备上,这就完成了相同的任务,而争用不应该是行级锁定的问题。
可以说,我想你是因为树木而错过了森林。 表的谓词是“从IP IP到时间日期事件到表的用户ID”,这似乎是合理的,但也存在一些问题。(更新:好吧,就是这样的。) 您仍然可以将用户事件连接到用户,例如,用户事件,但不能实现外键约束。那是 为什么? eav通常是有问题的;究竟是不是eav并不重要。在架构中实现约束通常需要一两行代码,但在应用程序中可能需要几十行代码,如果多个应用程序在多个位置访问同一数据,则可以轻松地增加到数千行代码。所以,一般来说,如果你能用外键约束来防止坏数据,你就可以保证没有应用程序会这么做。 你可能认为事件并不那么重要,但作为一个例子,广告印象就是金钱。我绝对希望在设计过程中尽早发现与广告印象相关的任何错误。 进一步评论
有了一些警告,你就可以建立一个非常成功的系统。如果有一个适当的约束系统,你会说,“如果任何一个应用程序不知道它在做什么,数据库管理系统会标记一个错误。”这可能需要比你更多的时间和金钱,所以你可以拥有的更简单的东西可能比你拥有的更完美的东西要好。你不能。去拉维。 |
|
|
3
0
我不能对本的回答加评论,所以有两件事… 首先,在独立的olap/dss数据库中使用视图是一回事;在事务数据库中使用视图是另一回事。高性能的mysql用户 recommend against using views 表现重要的地方 我同意wrt数据完整性,这是使用带有“event s”的star或snowflake作为中心事实表(以及像我一样使用多个事件表)的另一个优势。但不能围绕IP地址设计引用完整性方案 |
|
|
blogger13 · 视频租赁店数据库的规范化 1 年前 |
|
|
ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
Grenish Rai · Firestore错误“用户文档不存在” 1 年前 |
|
|
Saijo-Shi · PLpgsql中的更新触发器 1 年前 |
|
Dante · Django::配置不当:池不支持持久连接 1 年前 |
|
YouLocalRUser · 删除重复行,保留第一行 2 年前 |