如何使用mongodb的php驱动程序的函数storeFile()确保数据完整性?

如何使用mongodb的php驱动程序的函数storeFile()确保数据完整性?,php,mongodb,data-integrity,Php,Mongodb,Data Integrity,我在这里问我的问题是因为我在其他地方还没有找到任何信息 上下文: -具有3台服务器的replicaSet体系结构。 -PHP作为主要语言 -图片平均大小约为2Mo -用法:使用storeFile()PHP驱动程序的函数将大量库存储到mongodb中 我担心主服务器崩溃期间和之后的存储。 如果我使用storeFile()存储一个完整的80Mo文件,那么客户端会将查询定向到复制集的主文件,然后开始存储数据。 如果现在写入操作完成60%,并且主操作失败,那么写入操作会发生什么情况? 我知道我将获得一个

我在这里问我的问题是因为我在其他地方还没有找到任何信息

上下文:
-具有3台服务器的replicaSet体系结构。
-PHP作为主要语言
-图片平均大小约为2Mo
-用法:使用storeFile()PHP驱动程序的函数将大量库存储到mongodb中

我担心主服务器崩溃期间和之后的存储。
如果我使用storeFile()存储一个完整的80Mo文件,那么客户端会将查询定向到复制集的主文件,然后开始存储数据。
如果现在写入操作完成60%,并且主操作失败,那么写入操作会发生什么情况?
我知道我将获得一个异常,我捕获该异常并尝试重试该操作。 但是已经写入的数据呢?

数据库中有一个现有文件,它是原始图片的一部分,因此已损坏?
或者,它与事务类似,因此如果发生错误,mongodb将回滚操作并抛出异常?


链接到google group上的my thread:

PHP MongoDB驱动程序将尝试“清理”对GridFS的失败写入,但是如果主线程崩溃,则我们无法访问任何主线程以在其上执行清理例程

因此,数据仍将存在于chunks集合中,但元数据(以及实际的文件信息)不会存在,因为在整个GridFS写入成功完成之前,元数据不会被写入

一般来说,这不是问题,因为您不应该经历很多故障切换。 然而,如果这是一个实际的问题,即您正在存储几兆字节的数据,而您无法真正访问这些数据,那么您需要创建某种后台/cronjob任务,该任务将遍历chunks集合并检测孤立的chunks。 但要小心,因为您不想删除当前正在创建的块:)