我正在构建一个网络应用程序。这个应用程序将使用MySQL来存储与每个用户相关的所有信息。但是,它也将使用MySQL来存储sys管理类型的东西,如错误日志,事件日志,各种临时令牌等。这第二组信息可能会比第一组更大,而且它并不重要。如果我丢失了所有错误日志,该网站将继续没有打嗝。
对于是否为这些不同类型的信息拥有多个数据库,或者将它们全部放入多个表中的单个数据库,我感到很遗憾。
保持一致的原因是我只需要打开一个连接。我注意到连接打开会产生可测量的时间损失,特别是使用远程mysql服务器。
你们做什么?
答案 0 :(得分:2)
Fisrt,我必须说,我认为将所有事件日志,错误日志存储在db中是一个非常糟糕的主意,而您可能希望将它们存储在文件系统中。
如果您的网络应用中出现意外情况,您只需要错误日志或事件日志。然后你下载文件,并检查它,就是这样。无需将其存储在数据库中。它会降低数据库和Web应用程序的速度。
作为您问题的答案,如果您真的想要这样做,您应该将它们分开,并且您应该找到一种方法来保持页面运行,即使您的事件og和错误日志数据库已加载并且响应缓慢。
答案 1 :(得分:1)
使用两个不同的数据库(一个用于应用程序的“核心”数据,另一个用于“技术”数据)可能不是一个坏主意,至少如果您希望您的应用程序具有很多用户:
也许打开两个连接意味着更多的时间 - 但这种差异可能相当微不足道,不是吗?
我曾经使用过几次使用两个数据库的应用程序:
这样,是的,我们有时打开两个连接 - 只有一个服务器无法处理负载...
答案 2 :(得分:1)
无论如何,请使用连接池。所以获得连接的时间不是问题。但如果您有2个连接,则事务处理会变得更加复杂。另一方面,有时拥有2个连接很方便:如果业务事务出现问题,您可以回滚事务并仍然在管理事务上记录失败。但我仍然会坚持使用一个数据库。
答案 3 :(得分:0)
我只会使用一个数据库 - 主要是因为您提供的原因:您只需要一个连接即可同时访问日志和用户存储的数据。
根据您的编程语言,某些框架(J2EE作为示例)提供连接池。有两个数据库,您需要两个池。另一方面,在PHP中,在设置连接(或两个)时,性能会有所提升。
答案 4 :(得分:0)
我认为没有理由建立两个数据库。拥有专门用于“技术”和“业务”数据的表格是完全可以接受的,但逻辑分离应该足够了。
除非您指的是应用程序和数据仓库星型模式,否则物理隔离对我来说似乎没有必要。在这种情况下,它可以是实时更新,或者更常见的是每晚批量ETL。
答案 5 :(得分:0)
无论你使用单独的“数据库”,它都只是目录,对mysql没有任何影响。
这可能会使设置权限更容易,这是合理的理由。除此之外,它与将表保持在同一个数据库中完全相同(除了你可以有几个具有相同名称的表......但请不要这样做)
然而,将它们放在不同的服务器上可能是一个好主意,因为您可能不希望核心关键(例如用户信息)数据与您的大量,不重要的数据混合在一起。对于旧的审计数据,调试日志等尤其如此。
此外,短期数据(如搜索结果,会话等)也可以放在不同的服务器上 - 它可能没有高可用性[1]的要求。
话虽如此,如果您不需要这样做,请将其全部转储到一个更容易管理的服务器上(备份,提供高可用性,管理安全性等)。
通常不可能在> 1服务器上获取一致的数据快照。这是一个很好的理由,只有一个(或您为备份目的而关心的)
[1]数据中,不是数据库。
答案 6 :(得分:0)
在MySQL中,InnoDB可以选择将某个数据库的所有表存储在一个文件中,或者每个表有一个文件。
无论如何,建议每个表都有一个文件,如果这样做,如果你有一个或多个数据库,它会对数据库存储级别产生影响。
使用连接池时,一个或多个数据库可能也不重要。
所以,在我看来,问题是你是否考虑将数据库的“另一半”分离到一个单独的服务器 - 单独的服务器可能有一个非常不同的硬件配置,例如没有RAID。如果是这样,请考虑使用单独的数据如果没有,请使用单个数据库。