Jok*_*kus 2 php google-app-engine google-cloud-storage
我在我的GAE-Projekt中使用了GoogleCloudStorage,我想知道当我同时访问两个实例一个文件时会发生什么.我创建了一个PHP脚本,它打开一个文件,读取它的内容,添加一些内容并保存如下:
$userContent = json_decode(file_get_contents("*** link ***"));
$userContent->abc = "test"; // Do some changes
file_put_contents("*** link ***", json_encode($userContent);
Run Code Online (Sandbox Code Playgroud)
我担心的是,当我打开文件时,另一个实例也会打开它,数据会丢失.那么在这种情况下会发生什么?
谷歌云存储本身并没有锁定.对GCS对象的读取和写入都是原子的 - 每次读取都将完全从一个版本获取对象的内容; 每次写入都将完全取代对象.没有"中间阶段"(部分对象来自一个版本,其余部分来自另一个版本)可能存在.
当然,它是完全可能的"丢失数据",如果多个任务试图独立和W/O以某种方式同步或它们之间的谈判"修改"一个GCS对象!那是因为GCS没有"修改"对象的概念:只读取对象,完全替换对象.
因此,尝试"修改"GCS对象的任务实际上会读取它,修改它在内存中的任何内容,然后用该内存的内容覆盖该对象.如果多个任务独立地"覆盖"同一个对象,则最后一次覆盖将"赢",并消除先前的覆盖.
我不知道"GAP-Projekt"是什么,但假设我们实际上在讨论GAE(根据标签),使用共享资源(例如memcache),GAE应用的多个实例之间相互同步是相当容易的或GAE数据存储区.根据惯例,这些资源将用于表示"当前拥有"GCS对象的实例; 另一个实例会等待...
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |