|
1
27
我认为你的大多数担忧都是不必要的。回答一个又一个问题: 1) 最大的问题是自定义属性,每个事件都不同。为此,您必须使用 EAV (entity-attribute-value) 设计重要的问题是,这些属性可以有哪些类型?如果不止一个,例如字符串和整数,那么它就更复杂了。这种设计通常有两种类型:
因此,这些表格看起来像:
2) 你所说的分割是什么意思?查询事件的各种参数?在上面提到的EAV设计中,您可以这样做:
这将选择APP_LAUNCH类型的所有事件,其中APPVERSION为>4和APP_NAME包含“Office”。 3) EVENTTYPE表可以达到一致性的目的,即您可以:
或者,您可以使用ID作为数字,并在EVENTTYPE表中具有事件名称-这节省了空间,并允许轻松重命名事件,但您需要在每个查询中加入该表(导致查询速度较慢)。取决于节省存储空间的优先级与较低的查询时间/简单性。 4) 时间戳范围查询在您的设计中实际上非常简单:
5) “为每个事件插入一行不好吗?” 这完全取决于你!如果您需要每个这样的事件的时间戳和/或不同的参数,那么您可能应该为每个事件设置一行。如果有大量相同类型和参数的事件,您可能可以像大多数登录系统所做的那样:聚合发生在一行中的事件。如果你有这样的直觉,那么这可能是一条路要走。 6) “我没有足够的SQL经验,不知道这些查询在可能数十万个这样的条目上是如何执行的” 成百上千个这样的条目将被毫无问题地处理。当你达到百万时,你将不得不更多地考虑效率。 7) “当我希望客户端真正获得分析时,聚合表或内存缓存是否有助于缓解问题?” 当然,如果查询速度变慢并且需要快速响应,这也是一种解决方案。但是,您必须引入一些机制来定期刷新缓存。它过于复杂;也许最好考虑聚合输入上的事件,请参见5)。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |