【问题标题】:One database per user [closed]每个用户一个数据库[关闭]
【发布时间】:2014-01-28 16:56:24
【问题描述】:

我正在使用 CodeIgniter 开发一个 php 应用程序。我打算将单个 MySQL 数据库拆分为多个 sqlite 数据库。也就是说,一个处理身份验证的数据库(MySQL/PostgreSQL/SQLite)和每个用户一个保存与用户相关信息的 sqlite 数据库。我不使用任何连接,它的读取次数多于写入次数。

为了提高速度,将数据库拆分为多个 sqlite 数据库是个好主意吗?另外,扩展到多台服务器时会不会有问题?我可以根据用户使用重定向来指向正确的服务器。

编辑: 决定使用 MariaDB 作为我所有用户的服务器。

【问题讨论】:

  • 一般来说:不,这是个糟糕的主意。您是否有任何特别具体的场景可以证明多个 SQLite 数据库比单个 MySQL 服务器或其集群具有明显的优势?如果没有:它不会更快。
  • 为什么不只在用户表中添加一行?这对你有那么糟糕吗?
  • 当数据库变大时,索引会变大,可能会降低整个网站的速度。通过将数据库拆分为多个文件,增长率会更低。此外,如果我必须移动到不同的服务器,我可以使用相同的数据库,而不是在具有当前转储的新服务器上重新创建。
  • MySQL 已被证明可以很好地处理许多 TB 范围内的数据库。当你达到那个尺寸时开始担心。此外,索引的工作是增长,这就是他们所做的。这并不意味着他们变得越来越慢。即使这样,也有处理巨型数据库的解决方案。将它们拆分成更小的 SQLite 数据库并不是解决办法。在你开始担心之前证明这是一个问题。
  • 您是否分析过如何在不清除现有数据的情况下处理数据库更改的部署?恕我直言,这是一个关键点。

标签: php mysql database sqlite codeigniter


【解决方案1】:

通过将数据拆分到多个 sqlite 数据库,而不是速度,您会感到头疼和浪费时间。不要这样做,除非你知道你必须这样做,并且可以用硬数字来证明它,而不是假设的场景。

如果您正在构建的系统具有一定价值(将用于商业等),则上述建议适用。当然,如果这只是一个玩具/培训项目,欢迎你做任何你想做的事,并从中学习。

【讨论】:

  • 我计划将每个用户数据库放在单独的用户目录中。所以对于用户 ID 1,我可能有 user_1.database。由于用户 ID 是从主登录中获知的,因此将通过从用户 ID 构造路径来自动处理 sqlite 访问。
  • 我也担心将数据库移植到新服务器。如果我必须移植到不同的服务器,SQL 转储将是巨大的,sqlite 可以满足每天 10 万次点击,我可能不会很快达到这个数字,但当它达到限制时我不想担心。
  • sql 转储具有出色的压缩率,~90%(给或取几个百分点)。只需在传输之前将其压缩即可。 :)
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2022-01-26
  • 2011-02-17
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多