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