数据库分离-MySQL

数据库分离-MySQL,mysql,Mysql,我有一个主要的MySQL数据库设置,和一个类来处理对它的查询。它运行得很好。我正在我的网站上建立一个定制的广告系统,我想知道创建一个单独的数据库来处理这个系统是否有任何好处 这样做有什么陷阱吗 选项#1-一个DB用于主要网站功能,一个DB用于广告系统 选项#2-一个DB用于主网站功能和广告系统好吧,您需要为您使用的每个数据库建立一个新连接,还需要一个DB类的新实例-这两个都需要一些(最小)内存。我个人认为你没有理由需要/想要这样做。如果您只想将这两件事分开,也许您可以在广告表中使用类似“adv_

我有一个主要的MySQL数据库设置,和一个类来处理对它的查询。它运行得很好。我正在我的网站上建立一个定制的广告系统,我想知道创建一个单独的数据库来处理这个系统是否有任何好处

这样做有什么陷阱吗

选项#1-一个DB用于主要网站功能,一个DB用于广告系统


选项#2-一个DB用于主网站功能和广告系统

好吧,您需要为您使用的每个数据库建立一个新连接,还需要一个DB类的新实例-这两个都需要一些(最小)内存。我个人认为你没有理由需要/想要这样做。如果您只想将这两件事分开,也许您可以在广告表中使用类似“adv_2;”的前缀


编辑:如果您想要组合(例如连接)两个数据库的数据,则可能会出现另一个问题-如果您不使用多个数据库,您将有一个更轻松的时间。

好的,您使用的每个数据库都需要一个新的连接,您还需要一个新的DB类实例-这两个都需要一些(最小)内存。我个人认为你没有理由需要/想要这样做。如果您只想将这两件事分开,也许您可以在广告表中使用类似“adv_2;”的前缀


编辑:如果您想要组合(例如连接)两个数据库的数据,则可能会出现另一个问题-如果您不使用多个数据库,您将有一个更轻松的时间。

Johnnietheblack,这里没有简单的答案,甚至没有一个正确的答案:不同的表需要不同的方法,有时,为了提高性能和可伸缩性,您不得不放弃一个学术性的/更“安全”的数据库模型

这总是一个权衡的问题。根据我个人的经验,我有一些想法与大家分享:

  • 当您在不同的数据库中分离表时,您在数据抽象层中有更多的工作要做,以保持引用完整性(您必须做数据库杂务…)和链接信息。另一方面,管理数据库(索引、数据文件、查询调整等)更容易

  • 具有高插入率和低维护(更新/删除)的表,以及引用完整性不那么重要的表(如日志表),都很适合放在单独的数据库中:虽然插入的I/O很重,但记录不会随时间而改变,很少检索,它们的索引往往非常简单(日期/时间和一些其他属性)。我有一个案例,其中日志文件非常大(数百万条记录)在某一点上,单次插入几乎需要1秒。因为它每天有50万条新记录,这是一个滚雪球:我们无法停止系统来调整这该死的东西,因为它需要太长时间,而系统正在关闭,因为这个日志表到处都在使用,并且影响了业务(75%的过程使用这个表)

  • 数据库可以吃掉数千条记录作为早餐,因此对于小表(少于1000条记录),您通常不需要担心,只需要担心大表(超过5000条).我有一个朋友DBA,他根本不为大多数表的性能创建索引:他做了一些测试,发现他们的SQL Server正在将大多数表的查询计划更改为表扫描。但请注意:这是一剂强效药

  • 在定义是否应将新的表集放在数据库中时,请尝试考虑SaaS:您的广告系统需要与网站紧密集成,或者它可以是一个单独的组件,可由其他组件重用?如果是后者,则应考虑使用单独的数据库,以便在您可以更新模式,在新表中进行维护,等等


还有很多其他的例子,但是,唉,我们的时间太少了……重要的是要保持开放的心态,试着忘记一点关于学术上完美的第三种形式的数据库模型。希望它能有所帮助!

Johnnietheblack,这里没有简单的答案,甚至没有一个正确的答案:不同的表需要不同的方法,而且有时,为了提高性能和可伸缩性,您必须抛弃一个学术性的/更“安全”的数据库模型

这始终是一个权衡的问题。根据我的个人经验,我有一些想法要与大家分享:

  • 当您在不同的数据库中分离表时,您在数据抽象层中有更多的工作要做,以保持引用完整性(您必须做数据库杂务…)和链接信息。另一方面,管理数据库(索引、数据文件、查询调整等)更容易

  • 具有高插入率和低维护(更新/删除)的表,以及引用完整性不那么重要的表(如日志表),都很适合放在单独的数据库中:虽然插入的I/O很重,但记录不会随时间而改变,很少检索,它们的索引往往非常简单(日期/时间和一些其他属性)。我有一个案例,其中日志文件非常大(数百万条记录)在某一点上,单次插入几乎需要1秒。因为它每天有50万条新记录,这是一个滚雪球:我们无法停止系统来调整这该死的东西,因为它需要太长时间,而系统正在关闭,因为这个日志表到处都在使用,并且影响了业务(75%的过程使用这个表)

  • 数据库可以吃掉数千条记录作为早餐,因此对于小表(少于1000条记录),您通常不需要担心,只需要担心大表(超过5000条).我有一个朋友DBA,他根本不为大多数表的性能创建索引:他做了一些测试,发现他们的SQL Server正在将大多数表的查询计划更改为表扫描。