0

所以情况是我将有两个或更多“插入”机器,我的 Web 应用程序只插入我们想要登录到机器的数据(它们都在负载均衡器后面)。每隔几个小时,机器就会与负载均衡器断开连接,并将它们的信息上传到“主”数据库中,机器应该具有我们正在收集的所有数据的相对最新版本。

本来我打算用mysqldump的,但是发现不能指定命令不抓取我有的auto_increment id列(这会导致主键冲突)。我看到另一个帖子建议使用临时表将数据放入然后删除列,但是“插入”机器的规格非常低,数据量可能非常大,大约 50,000 行。除了以编程方式一次只取 x 行并将它们插入远程“主”数据库之外,还有更简单的方法吗?目前我在“插入”机器上安装了 php。

谢谢您的意见。

4

1 回答 1

1

您不希望主数据库记录与从数据库的每条记录具有相同的主键吗?如果不是,这可能会导致查询将根据它所在的机器产生不同结果的问题。

如果您想要一个可以避免冲突的任意主键,请考虑删除自动增量 ID 并构造一个保证每个服务器上的每条记录都是唯一的 ID。例如,您可以将 unix 时间(以微秒计)与每个服务器不同的标识符连接起来。一个稍微懒一点的解决方案是连接时间 + 一个随机的 10 位数字或其他东西。PHP 的 uniqid() 函数会自动执行类似的操作。

如果您不打算使用该 ID,则只需将其从您的表中删除。没有规定说每个表都必须有一个主键。如果您不使用它,但您想对有关何时插入每条记录的信息进行编码,请添加一个时间戳列(并且不要将其设为键)。

于 2012-07-02T19:59:58.400 回答