我有一个软件,只读取一个数据库的名字。但是,每天我都必须检查那些30+天前的记录,所以我的解决方案是每天重命名数据库(附加时间戳),并创建一个旧名称的新记录,这样我的软件就可以继续运行。
我需要我的软件来读取所有的数据库,但它只能读取一个。是否有一种方法可以将主数据库链接到存档的数据库而不复制数据库?我认为我不能使用MERGE
,因为我无法在白天拆分数据库。
例如:
MAINDB
MAINDB
变成BKDB_2015_12_04
。我仍然可以从mysql访问数据库,因为它不是转储数据库。MAINDB
是为软件的阅读。BKDB_2015_12_04
和任何其他数据库BKDP_*
中的数据。MAINDB
的时候,也要读BKDB_*
本质上,我有一些数据库是“只读”的,我每天对数据进行分区。我正在阅读关于使用PARTITION
的文章,但是我正在处理大量的数据,我不确定PARTITION
在处理这么多数据方面是否有效。
发布于 2015-12-04 05:41:19
重新命名和重新创建数据库是一个“坏主意”。当您重命名和重新创建时,您如何确保数据库没有被访问?
例如,假设我正处于购买过程中,当我将项目添加到数据库表中时,篮子会被写入数据库表(不太可能,但可能)。我正在四处浏览,选择更多的物品。在我浏览的时候,现有的数据库被重命名,并重新创建了一个新的数据库。立刻,我的篮子空了,没有任何解释。
使用备份,如果通过备份将数据库重命名为half=way,会发生什么情况?如何确保所有其他重命名的数据库都已备份?
最后一件事--从长远来看,重命名的数据库会发生什么?他们会永远留在那里吗?在一段时间后是否会下降?等
如果您正在检查30+天前的记录,您应该考虑的只读解决方案是对每个记录进行时间戳。如果您的表是通过单个“主”表链接的,请在其中放置时间戳。您的查询可以基本保持不变(除了添加一个检查次数戳),并且在过去的30天中不需要计算数据库名称。
发布于 2015-12-04 06:25:22
您应该能够使用UNION对所有数据库进行查询,您只需要知道数据库的名称:
select * from MAINDB.table_name
union all
select * from BKDB_2015_12_04.table_name
union all
select * from database_name.table_name
https://stackoverflow.com/questions/34089558
复制相似问题