读取 vs 写入表格数据库设计

4
我有一个用户活动跟踪日志表,记录所有用户的活动。由于详细跟踪每个点击,这是一个极高写入频率的表格。到目前为止,数据库设计是完美的。问题在于下一步。
我需要将数据输出给业务人员,同时这些人可以查询以获取过去的活动数据。因此,读取数据也是中等到高强度的。我不喜欢从同一个高流量表格中进行读写操作的想法。
因此,理想情况下,我希望将表格拆分:第一个用于快速写入(少或没有外键),然后将数据完全格式化并将所有标签拉入可读表格以供阅读使用。
所以问题是: 1) 这对我来说是否是最佳方法? 2) 如果我确实保留了两个表格,如何使它们保持同步?我不能立即将数据复制到阅读表格中,因为它会导致与写入表格相同的问题 - 这将破坏拥有单独表格的整个目的。如果阅读表格过时,那么活动数据跟踪将无法与其他用户数据(例如session_id等)链接,因此当使用案例调用这些ID时,写入将失败。
我正在使用MySQL处理用户数据和HBase处理一些大型表格,并使用php codeignitor开发我的应用。
谢谢。

你是否有确凿的数据表明从该表中读取存在真正的性能问题?或者这只是“过早优化”而已? - APC
"极高的写入"是什么意思?请指定每秒事务数/兆字节。对于读取操作,接受何种延迟(数据更新到多新程度)? - nvogel
目前还没有进行性能测试。由于我们正在对页面上的每个动作进行深入的用户跟踪,并且无论活动如何,都会每X秒记录跟踪细节,因此写入量很高。我们没有确定X的数字,因为它可以根据最终性能而定。理想情况下,希望将其设置为2秒,以尽可能实时地跟踪,因此如果我们这样做,则每2秒每个用户至少需要1条记录。如果有100万用户登录,则每2秒就会有100万次写入。 - Keith
1个回答

3
是的,拥有两个独立的表是最佳方法。几个月前,我也遇到了同样的问题,不过是针对一个守护程序类型的应用而不是网站。
最终,我得到了1个MEMORY表,保存“实时”数据,这些数据在几乎每个事件上都被插入/更新/删除,另一个表则复制了实时数据行,但没有不必要的系统列 - 我的历史记录表,仅用于按请求读取。
实时表仅与运行进程相关,因此如果由于服务器故障丢失了包含的数据,我并不关心 - 以后需要读取的任何数据已经存储在历史表中。因此...在两个表中复制数据没有问题 - 您的目标是性能,而不是规范化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接