MySQL数据库。 Web应用程序有多少?

时间:2009-12-27 14:56:08

标签: mysql web-applications mysql-management

我正在构建一个网络应用程序。这个应用程序将使用MySQL来存储与每个用户相关的所有信息。但是,它也将使用MySQL来存储sys管理类型的东西,如错误日志,事件日志,各种临时令牌等。这第二组信息可能会比第一组更大,而且它并不重要。如果我丢失了所有错误日志,该网站将继续没有打嗝。

对于是否为这些不同类型的信息拥有多个数据库,或者将它们全部放入多个表中的单个数据库,我感到很遗憾。

保持一致的原因是我只需要打开一个连接。我注意到连接打开会产生可测量的时间损失,特别是使用远程mysql服务器。

你们做什么?

7 个答案:

答案 0 :(得分:2)

Fisrt,我必须说,我认为将所有事件日志,错误日志存储在db中是一个非常糟糕的主意,而您可能希望将它们存储在文件系统中。

如果您的网络应用中出现意外情况,您只需要错误日志或事件日志。然后你下载文件,并检查它,就是这样。无需将其存储在数据库中。它会降低数据库和Web应用程序的速度。

作为您问题的答案,如果您真的想要这样做,您应该将它们分开,并且您应该找到一种方法来保持页面运行,即使您的事件og和错误日志数据库已加载并且响应缓慢。

答案 1 :(得分:1)

使用两个不同的数据库(一个用于应用程序的“核心”数据,另一个用于“技术”数据)可能不是一个坏主意,至少如果您希望您的应用程序具有很多用户:

  • 它允许您在一台服务器上放置一个DB,在另一台服务器上放置另一个DB
    • 你可以考虑稍微扩展一下,以后:更多服务器用于“核心”数据,而且只有一个用于“技术”数据 - 或相反的
  • 如果“技术”数据不那么重要,您可以(更容易)拥有两个不同的备份流程/政策
  • 拥有两个不同的数据库和两个不同的服务器,这也意味着您可以对技术数据进行繁重的计算,而不会影响托管“核心”数据的数据库服务器 - 这些计算在日志中可能很有用,或者类似的东西。
    • 作为旁注:如果您不需要那种“报告”计算,那么将这些数据存储到数据库中是没有用的,文件会完美吗?

也许打开两个连接意味着更多的时间 - 但这种差异可能相当微不足道,不是吗?


我曾经使用过几次使用两个数据库的应用程序:

  • 一个“主”/“写”数据库,仅用于写入
  • 和一个“slave”数据库(第一个复制到多个从属服务器),将用于读取

这样,是的,我们有时打开两个连接 - 只有一个服务器无法处理负载...

答案 2 :(得分:1)

无论如何,请使用连接池。所以获得连接的时间不是问题。但如果您有2个连接,则事务处理会变得更加复杂。另一方面,有时拥有2个连接很方便:如果业务事务出现问题,您可以回滚事务并仍然在管理事务上记录失败。但我仍然会坚持使用一个数据库。

答案 3 :(得分:0)

我只会使用一个数据库 - 主要是因为您提供的原因:您只需要一个连接即可同时访问日志和用户存储的数据。

根据您的编程语言,某些框架(J2EE作为示例)提供连接池。有两个数据库,您需要两个池。另一方面,在PHP中,在设置连接(或两个)时,性能会有所提升。

答案 4 :(得分:0)

我认为没有理由建立两个数据库。拥有专门用于“技术”和“业务”数据的表格是完全可以接受的,但逻辑分离应该足够了。

除非您指的是应用程序和数据仓库星型模式,否则物理隔离对我来说似乎没有必要。在这种情况下,它可以是实时更新,或者更常见的是每晚批量ETL。

答案 5 :(得分:0)

无论你使用单独的“数据库”,它都只是目录,对mysql没有任何影响。

这可能会使设置权限更容易,这是合理的理由。除此之外,它与将表保持在同一个数据库中完全相同(除了你可以有几个具有相同名称的表......但请不要这样做)

然而,将它们放在不同的服务器上可能是一个好主意,因为您可能不希望核心关键(例如用户信息)数据与您的大量,不重要的数据混合在一起。对于旧的审计数据,调试日志等尤其如此。

此外,短期数据(如搜索结果,会话等)也可以放在不同的服务器上 - 它可能没有高可用性[1]的要求。

话虽如此,如果您不需要这样做,请将其全部转储到一个更容易管理的服务器上(备份,提供高可用性,管理安全性等)。

通常不可能在> 1服务器上获取一致的数据快照。这是一个很好的理由,只有一个(或您为备份目的而关心的)

[1]数据中,不是数据库。

答案 6 :(得分:0)

在MySQL中,InnoDB可以选择将某个数据库的所有表存储在一个文件中,或者每个表有一个文件。

无论如何,建议每个表都有一个文件,如果这样做,如果你有一个或多个数据库,它会对数据库存储级别产生影响。

使用连接池时,一个或多个数据库可能也不重要。

所以,在我看来,问题是你是否考虑将数据库的“另一半”分离到一个单独的服务器 - 单独的服务器可能有一个非常不同的硬件配置,例如没有RAID。如果是这样,请考虑使用单独的数据如果没有,请使用单个数据库。