Google cloud storage 谷歌云存储交易?

Google cloud storage 谷歌云存储交易?,google-cloud-storage,Google Cloud Storage,地面军事系统似乎没有任何交易机制。这是正确的吗 我希望能够有一个长期的交易。例如,如果我可以启动一个事务并指定一个过期时间(如果没有在X时间内提交,它会自动回滚),那就太好了。然后我可以使用这个句柄插入对象、合成、删除等,如果一切顺利,则发出iscommitmable(),如果是,则发出commit() 这是可能的吗?对象写入是事务性的(要么成功写入完整的对象及其元数据,使对象可见;要么失败而不可见)。但没有跨多个地面军事系统操作的交易机制 Mike云存储客户端库提供了一个类似文件的对象,它具有

地面军事系统似乎没有任何交易机制。这是正确的吗

我希望能够有一个长期的交易。例如,如果我可以启动一个事务并指定一个过期时间(如果没有在X时间内提交,它会自动回滚),那就太好了。然后我可以使用这个句柄插入对象、合成、删除等,如果一切顺利,则发出iscommitmable(),如果是,则发出commit()


这是可能的吗?

对象写入是事务性的(要么成功写入完整的对象及其元数据,使对象可见;要么失败而不可见)。但没有跨多个地面军事系统操作的交易机制


Mike

云存储客户端库提供了一个类似文件的对象,它具有Open()和Close()操作。如果一个操作可以是事务性的,那么从理论上讲,在所有其他操作期间,应该可以打开一个“锁定文件”,只有在完成后关闭它,所有其他文件才会关闭

换句话说,您必须编写进程才能使用“锁定文件”,这样,您至少可以知道是否所有文件都已写入/读取,或者是否存在错误。每当下一轮操作发生时,它只会查找与写入的文件集相对应的锁文件的存在(您必须安排命名、目录布局等,以使其有意义)。如果存在,我们可以假定文件组已成功写入。如果它不存在,那么假设发生了什么(或者该过程尚未完成)


我还没有实际测试过这个。但我将其作为一个想法提供给其他可能会不顾一切地尝试的人。

这有可能在将来添加吗?@RobertD:我们目前没有支持跨多个请求的事务的计划。然而,我们始终对现实世界的用例感兴趣,因此如果您愿意/能够分享一些关于为什么需要此支持的详细信息,我将与我们的产品管理层分享。您可以发送到gs-team@google.com如果您不想公开发布该信息。@MikeSchwartz我有一个用例:我希望多个客户端能够同时将信息附加到单个gcs文件中。除非我弄错了,否则这将需要一个读操作,然后是一个写操作,这对操作需要是原子的,以便不可能覆盖不同客户机的修改。有解决方法吗?@Hans Brende:GCS不支持附加到对象,只支持继续写入尚未完成的对象;在这种情况下,已经写入的字节是不可变的,因此不可能覆盖其他客户端写入的字节。你能让多个客户端分别写入不同的对象吗?@Hans Brende:听起来你想做并发安全的读修改写更新。如果这就是你想要做的,你可以使用对象的前提条件-请看,是的,这可以工作,但它是一个可以自动的东西很多工作。大多数云API都缺少跨多个无状态调用的长时间运行事务的概念。。。理想情况下,您可以在存储引擎(如Google Cloud storage)上打开一个事务,如以下字符串txnId=gcs.startTransaction(60),然后返回一个可以跨越多个无状态调用的txnId(一个唯一事务标识符的字符串)。。。。请求1 gcs.writeMething(txnId,其他参数)最终gcs.commit(txnId)或gcs.rollback(txnId)。。。。如果事务没有在指定的时间范围内提交(本例中为60秒),它将自动回滚。对于复杂的或复杂的曲解来说,它可能很长(5或10分钟,甚至更长),而对于大多数事情来说,它可能很短(5或30秒)。您可以轻松地检查txn状态gcs。状态(txnId)可以返回一个JSON对象,其中包含txn启动的时间、当前状态、canCommit的标志:true/false以启用2阶段提交,等等。很遗憾,似乎没有人考虑这一点。