库存以获取价值"/>
Firebase:创建FIFO库存以获取价值
我已经被这个问题困扰了一个月。
我一直在尝试使用Firebase创建FIFO库存。我正在使用Firebase云功能更新FIFO库存。但是,如果我对插入(推)和移除(弹出)的for循环仅用for循环进行10次压力测试,则由于并发更新而中断。
有人对此有其他解决方案吗?
插入FIFO / PUSH:
let fifoRef = admin.database().ref('fifo/' + item.itemId + '/').push();
let fifo = {
price: data.items[uniqueId].price,
in: data.items[uniqueId].quantity,
quantity: data.items[uniqueId].quantity,
}
fifoRef.set(fifo);
获取FIFO值/ POP(这里我只是更新POP的数量):
// get fifo
let fifoReference = 'fifo/' + item.itemId;
let fifoRef = admin.database().ref(fifoReference);
fifoRef.once('value').then(currentData => {
let fifo = currentData.val();
for (let key in fifo) {
let val = fifo[key];
if (val.quantity > 0) {
// get fifo quantity
let fifoQuantityRef = admin.database().ref(fifoReference + '/' + key + '/quantity/');
// get local cache value
let fifoQuantityListener = fifoQuantityRef.on('value', () => {
// transaction start
fifoQuantityRef.transaction(function (quantity) {
if (quantity) {
if (quantity > 0 && quantitySubtotal > 0) {
if (quantity >= quantitySubtotal) {
// minus inventory amount
let amount = calculator(quantitySubtotal + "*" + val.price);
quantity = calculator(quantity + "-" + quantitySubtotal);
quantitySubtotal = 0;
// update quantity
return quantity;
} else {
let amount = calculator(quantity + "*" + val.price);
quantitySubtotal = calculator(quantitySubtotal + "-" + quantity);
return 0;
}
}
}
return quantity;
}, (error, committed, result) => {
fifoQuantityRef.off('value', fifoQuantityListener);
}, true);
});
集思广益:我只需要了解如何使用FIFO获取值。据我了解,Firebase最好用于不随事务插入和删除。但是,如果我仅使用插入和删除,如何创建FIFO?如果我创建数量为1的FIFO,则存储的数据将太大。
我曾尝试使用Google数据存储,但是数据存储的持久性非常慢(写入过程超过2秒)。持续时间少于1秒的Firebase无法使用该功能。当在1秒钟内完成PUSH和POP,但尚未持久存储数据存储区时,就会出现问题。
还有其他集思广益的想法吗?
我已经被这个问题困扰了一个月。我一直在尝试使用Firebase创建FIFO库存。我正在使用Firebase云功能更新FIFO库存。但是,如果我进行压力测试...
回答如下:使用下面的链接查看是否可以解决:
更多推荐
Firebase:创建FIFO库存以获取价值
发布评论