阅读和写表数据库设计

问题描述:

我有一个用户活动跟踪日志表,它记录所有用户活动发生的位置。由于深入跟踪点击跟踪,这是极高的写入表格。到目前为止,数据库设计是完美的。问题是下一步。阅读和写表数据库设计

我需要输出业务伙伴的数据+这些人可以查询以获取过去的活动数据。因此,也有半中到高的阅读。我不喜欢在同一个高流量表上阅读和写作的想法。

所以最好我要拆分的表格:第一个快速写入(从低到没有FKS),然后复制所有标签的ID变成读出表,超过完全格式化&数据拉阅读使用。

所以问题:
1)这是我最好的方法吗?
2)如果我确实保留2张表,如何保持它们同步?我不能立即将数据复制到读表中,因为它将数据写入写表中 - 它将无法实现单独使用表的全部目的,也不能保持读表的旧表,因为跟踪的活动数据与其他用户数据像session_id等,所以如果这些ID没有准备好,当它们的用例调用写入时将失败。

我使用MySQL作为用户数据和HBase的一些大型表格,使用php codeignitor作为我的应用程序。

谢谢。

+0

您是否有硬数据表明您在阅读此表时遇到实际的性能问题?或者这可能只是“不成熟的优化”? – APC 2011-04-27 06:13:33

+0

“极高写”是什么意思?请指定每秒交易次数/兆字节。什么样的延迟是可以接受的(数据必须是最新的读取)? – sqlvogel 2011-04-27 08:20:53

+0

尚未完成任何性能。高写入是因为我们深入用户跟踪页面上的每个移动,并且每隔X秒记录一次跟踪细节,而不考虑活动。我们没有X的数字,因为它可以是基于最终表现的任何数字。理想情况下,希望能够在2秒内获得尽可能多的实时跟踪信息,因此如果我们这样做,则每个用户至少每2秒查看一次闰秒。如果您有100万用户登录,那么每2秒钟就有1百万用户登录。 – Keith 2011-04-27 18:24:32

是的,有2个独立的表是最好的方法。我几个月前遇到了同样的问题,但是对于守护进程应用程序而不是网站。

最终我最终得到了1个MEMORY表,它保留了几乎每个事件上都插入/更新/删除的“实时”数据,另一个表中有实时数据行的副本,但没有不需要的系统列 - 我的历史表,它仅用于每个请求的阅读。

活动表仅与正在运行的进程相关,因此我不在乎包含的数据是否由于服务器故障而丢失 - 无论以后需要读取的数据是否已存储在历史记录表中。所以......在复制这两个表中的数据时没有问题 - 您的目标是性能,而不是标准化。