php – 如何进行SimpleDB备份?
我正在开发一个使用SimpleDB存储其数据的Facebook应用程序,但我意识到亚马逊没有提供备份数据的方法(至少我知道)
而SimpleDB很慢.您每秒可以获得大约4个列表,每个列表包含100个记录.不是备份大量记录的好方法. 我在网上找到了一些可以为你做备份的服务,但是我不愿意给他们提供我的AWS凭证. 所以我虽然使用线程.问题是,如果对域中的所有键执行选择,则需要等待第一页的next_token值以处理第二页,依此类推. 我想到的一个解决方案是根据Facebook id的最后2位数设置一个新属性.所以我开始一个选择为“00”的线程,另一个选择为“01”,依此类推,可能会运行100个线程并更快地进行备份(至少在理论上).一个相关的解决方案是将该域分成100个域(因此我可以单独备份每个域),但这会破坏我需要做的一些选择.另一个可能更友好的PHP解决方案是使用cron作业备份让我们说10,000条记录并保存“next_token”,然后下一个作业从next_token开始,等等. 有人有更好的解决方案吗?如果它是一个PHP解决方案它会很棒,但如果它涉及到其他东西,那么无论如何它是受欢迎的. PS:在你提到它之前,据我所知,PHP仍然不是线程安全的.而且我知道除非我在备份期间停止写入,否则会出现一些一致性问题,但在这种特殊情况下我并不太担心. 解决方法
从我的经验来看,创建代理分片属性的方法确实有效.
或者,我们过去所做的是将备份分解为两个步骤,以便尽可能多地进行多处理(尽管这是在java中,对于写入备份文件,我们可以依靠同步来确保写安全性 – 不确定php方面的交易是什么. 基本上我们有一个线程在域内对数据进行选择,而不是“SELECT * FROM …”,它只是“SELECT itemName FROM …”来获取需要备份的条目的键.然后将它们放入项密钥队列中,其中一个线程池使用getItem API读取,并以线程安全的方式写入备份文件. 这使得我们在单个域上的吞吐量比在单个线程上旋转更好. 最终,在我们的夜间备份中有多个域,我们最终还原为在单线程和“SELECT * FROM域”类型模型中执行每个域备份,主要是因为我们已经有一些线程正在进行并且线程负担已经开始成为备份处理器上的问题,但也因为备份程序开始变得危险复杂. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |