Pin*_*nch 6 database architecture distributed distributed-computing distributed-system
我正在尝试构建一个分布式系统来运行一些性能密集型计算.一个计算可以在多个工作节点处并行完成.问题是,随着数据源实时变化,我们希望每个工作节点(在单次计算期间)对相同的"版本"数据进行操作,即数据库的时间点快照.这是为了避免不一致的结果.
另一个问题是,每次计算的整个输入数据集可能非常大,因此目前我们在每个工作节点保留一个本地缓存,通过向数据源询问当前本地缓存版本的"差异"来定期刷新内容.将差异应用于本地缓存.
有哪些设计策略可以满足每个工作节点看到相同"数据"数据的要求(同时仍然有相当新鲜的数据)?我已经考虑过下面的解决方案,但想看看这是否是一个已经解决的常见模式:
一些估计的系统参数:
工人人数:10
平均工作时间:显然我们希望这个尽可能快,但是假设应该不到2分钟
输入作业数据(所有工人的总体数据):~100GB
数据库大小:~1TB
如果您不依赖 MySQL 并且可以使用 Oracle,那么有一个简单的解决方案适合您:
(我还没有找到 MySQL 闪回,如果您知道这方面的一些电机,请发表评论。)您不必创建手动快照等。您可以将其与单个数据库服务器一起使用,并且所有进程都可以读取数据已在要求的时间内代表。该解决方案非常干净且强大,但需要许可证。
如果我是你,我会尝试退后一步,尝试将问题进一步简化。如果不同的工作人员可以并行运行,则应适用以下内容:
如果这两个要求都有效,您可以使用单个数据库来存储计算等。您唯一需要关心的是应该仔细计划事务。
另一方面,在一个类似的项目中,我们使用了一个小技巧来实现这一点(作为闪回解决方案):插入时间也存储在数据库中。(更新实际上是带有新时间戳的插入。)所有计算等都是通过在查询中添加
给我 x 时间戳之前此类行的最后一个版本
通过这个解决方案,我们避免了许可证成本和快照维护。唯一的问题是,如果您不需要整个历史记录,它会很快耗尽您的数据库空间。为了解决这个问题,我们做了一个 cron 作业,根据时间戳清除未使用的记录。
如果你想获得更多,有一种叫做影子表的东西。关于这个主题有一篇很好的 MySQL 博客文章: http://arnab.org/blog/shadow-tables-using-mysql-triggers
归档时间: |
|
查看次数: |
174 次 |
最近记录: |