跨多个节点的 Firebase 数据一致性
Firebase data consistency across multiple nodes
根据 the firebase docs 数据被展平,索引用于 link 树中的不同节点:
users
$userId
widgets
$widgetId
widgets
$widgetId
在上面的示例中,如果用户创建了一个小部件,那么 widgetid
也会存储在用户节点下。
我的问题是,考虑到现在需要不止一次写入,是否有办法保证操作的一致性。
假设第一个操作是:
var newKey = fb.child('widgets').push({ name: 'widge' }).key();
然后我可以将它写到:
fb.child('users').child(auth.id).child('widgets').child(newKey).set(true);
但是如果两次写入之间出现故障或其他问题怎么办?或者,如果我有多个地方需要存储该密钥,并且在这些写入之间发生故障?
目前有没有办法在 firebase 中处理这个问题?
如果没有,未来有没有支持这个的计划?
如果是这样,有人可以提供一个具体的例子来说明如何做到这一点吗?
看看 transaction operation 并利用 onComplete 回调进行第二次写入。您可以链接交易。
Firebase 站点上提供的示例用于安全地递增计数器。
我已经提供了另一个问题的示例代码,可能对您有所帮助。 How to store users and groups for a chat using Firebase
请注意,这现在是核心 Firebase API 的一部分。有关详细信息,请参阅 this blog post。
var mergedUpdate = {};
mergedUpdate[ 'users/' + userId + '/widgets/' + widgetId ] = true;
mergedUpdate[ 'widgets/' + widgetId ] = widgetData;
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
ref.update(mergedUpdate);
根据 the firebase docs 数据被展平,索引用于 link 树中的不同节点:
users
$userId
widgets
$widgetId
widgets
$widgetId
在上面的示例中,如果用户创建了一个小部件,那么 widgetid
也会存储在用户节点下。
我的问题是,考虑到现在需要不止一次写入,是否有办法保证操作的一致性。
假设第一个操作是:
var newKey = fb.child('widgets').push({ name: 'widge' }).key();
然后我可以将它写到:
fb.child('users').child(auth.id).child('widgets').child(newKey).set(true);
但是如果两次写入之间出现故障或其他问题怎么办?或者,如果我有多个地方需要存储该密钥,并且在这些写入之间发生故障?
目前有没有办法在 firebase 中处理这个问题?
如果没有,未来有没有支持这个的计划?
如果是这样,有人可以提供一个具体的例子来说明如何做到这一点吗?
看看 transaction operation 并利用 onComplete 回调进行第二次写入。您可以链接交易。
Firebase 站点上提供的示例用于安全地递增计数器。
我已经提供了另一个问题的示例代码,可能对您有所帮助。 How to store users and groups for a chat using Firebase
请注意,这现在是核心 Firebase API 的一部分。有关详细信息,请参阅 this blog post。
var mergedUpdate = {};
mergedUpdate[ 'users/' + userId + '/widgets/' + widgetId ] = true;
mergedUpdate[ 'widgets/' + widgetId ] = widgetData;
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
ref.update(mergedUpdate);