2012-11-04 36 views
0

我们使用MySQL MyISAM引擎,并有我们需要每天都在更新行(百万)的数量庞大,而用户仍然可以访问数据库的情况。MySQL的MyISAM数据更新

我们有来自美国,英国,印度,中国不同时区的用户。当用户首次注册时,数据从第三方来源下载。所有用户共享相同的一组表,但它们的数据不重叠,即没有用户将访问与另一用户相同的行。

第三方系统修改数据,以便让我们的数据库是最新的,我们每个下载用户night.The的数据相对于用户时区的午夜更新用户的数据的新快照。

由于所有用户共享同一个表,这意味着数据更新过程可以更新在美国时区的用户的数据,而在英国的用户都在积极浏览他们的数据。这是问题所在。我们有数百万的数据需要更新,但我们无法做到。

请建议如何在不影响其他用户访问数据库,最好更新用户的数据。存储在数据库中的数据是数字,所有列都是整数。

+0

@Morgan感谢..我是新手here..didn't知道这件事。我将尝试接受答案..正在搜索如何执行此操作.. –

+0

您可以通过单击答案左侧的复选标记符号来执行此操作。祝你好运! –

回答

0

我看到两个解决方案:

  • 切换到InnoDB的数据库引擎 - 这会给你行级锁,而不是表级别。请注意,插入通常较慢。
  • 按地区划分你的餐桌。根据您的情况,如果您的表格按区域分割,您将永远不会同时阅读和编写任何表格。
+0

@马特..感谢您的回复。我们在数据库中使用了索引。那么,在转换到InnoDB Engine时,它会受到影响吗? –

+0

@MadanMadan索引对两者都是一样的。但是为InnoDB索引做很多插入和更新比较慢,因此在数百万插入内容中删除和重新创建索引会更快,或者至少指示数据库在插入期间跳过独特的检查(只要您确定它们确实是真的独特)。 –