我有一个用户活动跟踪日志表,用于记录所有用户活动。由于点击跟踪的深度跟踪,这是极高的写表。到目前为止,数据库设计是完美的。问题是下一步。
我需要为业务人员输出数据+这些人可以查询以获取过去的活动数据。因此,也存在半中到高读数。我不喜欢从同一个高流量表中读写的想法。
理想情况下,我想分割表:第一个用于快速写入(少到没有fks),然后将数据复制到完全格式化的&将所有标签中的ID拉入读表以供阅读使用。
所以问题:
1)这对我来说是最好的方法吗?
2)如果我保留2个表,如何保持它们同步?当写入写入表时,我无法将数据立即复制到读取表中 - 它将打破具有单独表格的整个目的,也不能使读取表保持旧状态,因为活动数据跟踪与其他用户数据的链接比如session_id等,所以如果这些ID在它们的usecase为它调用时没有准备好,那么写入将会失败。
我使用MySQL获取用户数据,使用HBase获取一些大型表格,并为我的应用程序使用php codeignitor。
感谢。
答案 0 :(得分:2)
是的,拥有2张独立的桌子是最好的方法。几个月前我遇到了同样的问题,但对于守护进程类型的应用程序而不是网站。
最终,我最终得到了1个MEMORY表,保存了几乎每个事件上插入/更新/删除的“实时”数据,以及另一个具有实时数据行重复的表,但没有不必要的系统列 - 我的历史表,仅用于按要求阅读。
实时表仅与正在运行的进程相关,因此我不关心所包含的数据是否因服务器故障而丢失 - 以后需要读取的数据已存储在历史表中。所以...复制两个表中的数据没有问题 - 你的目标是性能,而不是规范化。