【问题标题】:best mysql table structure for INSERT only?仅用于 INSERT 的最佳 mysql 表结构?
【发布时间】:2013-07-16 20:16:42
【问题描述】:

我在共享主机上有一个网站,预计会有很多访问者。我不需要用于读取的数据库(页面上显示的所有内容都是用 PHP 硬编码的),但我想存储用户输入的数据,因此仅用于编写。事实上,我只是存储它以便之后对其进行统计分析(在我的本地计算机上,下载后)。

所以我的两个问题:

  1. MySQL 是一个可行的选择吗?它的目的是在共享主机上运行,​​可以使用 PHP/MySQL,所以我不能真正使用很多其他花哨的包,但是如果例如为此目的,写入文件会更好,这也是可能的。据我了解,在文件中添加一行对于大文件来说是一个相对复杂的操作。另一方面,100 多个用户同时连接到 MySQL 数据库可能也是一个巨大的负载,即使它只是为了执行 1 个廉价的 INSERT 查询。

  2. 如果 MySQL 是一个不错的选择,那么最好如何配置表?目前我有一个 InnoDB 表,主键 id 自动递增(当然在存储数据的列旁边)。这是通用配置,所以也许有更优化的方式,因为我只需要写入表,而不是从中读取?

编辑:我主要是担心网站一发布就会火爆,所以我希望用户在很短的时间内访问。当然,我不希望由于数据库过载而丢失他们输入的数据。

【问题讨论】:

  • 只写数据的最佳数据结构什么都不是。下一个最好的将是一个平面文件......也就是说,如果你真的担心写入会阻碍处理。我想大多数时候,这无关紧要。
  • @PaulProgrammer - 这不就是 MySQL BLACKHOLE 存储引擎的用途吗? :)
  • 这真的不是写的,你需要阅读它来做统计分析。
  • 平面文件是什么意思?如果我读取一个文件,向其中添加一行,然后将其写回,那么第 100000 行将需要读取和写入 100000 行,不是吗?
  • 不,您可以附加到文件而无需读取和重写整个内容。

标签: mysql database performance insert filesystems


【解决方案1】:

MySQL 是一个非常合理的选择。可能比平面文件好得多,因为您说以后要汇总和分析这些数据。对平面文件执行此操作可能需要很长时间,尤其是在文件很大的情况下。此外,RDBMS 用于聚合和数据集操作。非常适合创建报告数据。

除了现有的行键之外,将您想要的任何数据列以及某种用于跟踪用户的标识符放入表中。 IP 地址是用户跟踪的合理选择,或者神奇的 cookie 值可能会起作用。这只是一张桌子,你不需要想太多。您可能希望在经常过滤报告的列上添加非聚集索引,例如IP地址、访问日期等

我主要是担心网站一发布就火爆,所以我希望用户在很短的时间内访问。当然,我不希望由于数据库过载而丢失他们输入的数据。

假设有适当的硬件支持,MySQL 等 RDBMS 明确设计用于处理重负载。不要出汗。

【讨论】:

  • 报告是在我的本地计算机上生成的,所以这不是问题,但是好的,我会坚持下去。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2017-01-08
  • 2017-09-26
  • 2018-11-26
相关资源
最近更新 更多