可扩展统计数据库

时间:2012-12-18 15:35:05

标签: mysql performance database-design database-schema

我需要为在线零售店建立一个联属系统。它的数据库(MySQL)应该为他们的附属公司提供:

  • 时间间隔过滤
  • 与观看次数,点击次数及其推介的关联链接
  • 客户和订单(仅限计数)
  • 产品和产品类别
  • 点击率,收入等 - 有些可以通过PHP脚本进行汇总

所以我基本上有两个选择:

  1. 将所有内容存储在一个表中(按键值对)并从该表中提取所有数据
  2. 在所有内容上制作表格
  3. 有人可以解释我该怎么做,以及这两种变体的缺点和好处是什么?我知道有一些性能方面的考虑,但我没有任何数据支持它。

2 个答案:

答案 0 :(得分:0)

如果您希望您的关联企业数据具有历史性,那么他们可以看到它随时间的变化情况,那么单独的表会更好。

如果您决定不想提供,并且只是及时给他们快照,那么将其添加到表中会更好。

就个人而言,我会使用会员ID引用的单独表格,这样他们就可以查看他们的信息随时间变化的图表。

现在,如果您存储数据,例如,每周存储一个新行,那么您将无法查看当天的更改,或者某个其他时间间隔小于您存储的时间间隔,以及它如果他们改变了他们的营销方法并希望看到效果,就很难根据产品进行过滤。

所以,我会使用选项3,即按需提取数据,因此用户可以根据需要对其进行过滤,但是,您也可以使用标准方法执行并运行一次/周,如果这是一个合理的时间片。

我会将这些结果缓存在NoSQL数据库中,主要是因为它可以更快地检索,因为你可以直接获取javascript并将其发送给用户。

如果你必须按需提取数据,那么也要在NoSQL数据库中缓存它,因为在你去实际的数据库之前,你首先要看那里是否能满足请求。

您还可以允许联盟会员设置他们自己的选择标准,并且每天只执行这些自定义条件,这样他们就不会只是为了获取他们的信息而访问真实数据库。

这是关键,限制关联公司需要访问真实数据库,将其信息放在其他地方,除非您必须访问该数据库,以减少可能影响客户的关联公司的任何影响。

答案 1 :(得分:0)

将所有内容存储在一个表中(按键值对)

此方法使用MySQL作为键值存储。在这种情况下,您没有明确定义的架构。这是一个优点,因为它很容易更改数据模式。这也是一个缺点,因为您没有注意到数据何时缺失或不一致。

在所有内容上制作表格

这会迫使您考虑您的数据结构,但将所有数据放入表中可能会很麻烦。

我建议你尝试制作表格。在项目开始时考虑数据结构是一件好事,并且使表强制您正确地构造数据。如果这对你来说真的不合适,你总是可以使用一个表或一些NoSQL解决方案。

相关问题