ノードアプリケーションから「view_amount」の値を増やそうとしていますが、大きな負荷がかかる場合は半分の時間しかかかりません。残りの半分は、私はこのエラーを取得する:Firebaseトランザクションでのエラー:[エラー:設定]
[Error: set]
これは私のコード(CoffeeScriptの)です:
@ref.firebaseClient.child('listings').child(val.listing_id).child("view_amount").transaction (current_value) ->
(current_value || 0) + 1
, (error, committed, snapshot) ->
if error
console.log error
そして、これは私が上でそれを設定していますパスです:
{
"headline" : "Yeezy Boost 750",
"shoe_size" : 9.5,
"short_url" : "K5wv",
"size_type" : "men",
"status" : "active",
"style_code" : "BB1840",
"timestamp" : 1467842400000,
"view_amount" : 3043,
"watching_amount" : 2
}
何がトランザクションコードを失敗させる可能性がありますか?その特定のパスでトランザクションを1秒間に何回も実行している可能性はありますか?トランザクションを実行するのと同時に「style_code」を変更した場合、トランザクションは失敗しますか?
更新:これは私のNode workerに発生しているエラーです。私は "view_amount"というパス上でトランザクションをしようとしているので、 "set"エラーがかなり混乱していることがわかります。私は決してその道に「セット」をしていません。
Aug 17 12:15:44 Worker app/worker.1: error: Error: set
Aug 17 12:15:44 Worker app/worker.1: at Error (native)
Aug 17 12:15:44 Worker app/worker.1: at hi (/app/node_modules/firebase/database-node.js:222:395)
Aug 17 12:15:44 Worker app/worker.1: at Yh (/app/node_modules/firebase/database-node.js:220:351)
Aug 17 12:15:44 Worker app/worker.1: at /app/node_modules/firebase/database-node.js:220:286
Aug 17 12:15:44 Worker app/worker.1: at /app/node_modules/firebase/database-node.js:145:167
Aug 17 12:15:44 Worker app/worker.1: at Dg.h.ud (/app/node_modules/firebase/database-node.js:146:104)
Aug 17 12:15:44 Worker app/worker.1: at rg.ud (/app/node_modules/firebase/database-node.js:137:364)
Aug 17 12:15:44 Worker app/worker.1: at Xf.eg (/app/node_modules/firebase/database-node.js:135:280)
Aug 17 12:15:44 Worker app/worker.1: at $f (/app/node_modules/firebase/database-node.js:123:109)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Ka.onmessage (/app/node_modules/firebase/database-node.js:121:467)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].EventTarget.dispatchEvent (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js:22:30)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._receiveMessage (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api.js:134:10)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].<anonymous> (/app/node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/api.js:34:49)
Aug 17 12:15:44 Worker app/worker.1: at emitOne (events.js:82:20)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].emit (events.js:169:7)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].<anonymous> (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:451:14)
Aug 17 12:15:44 Worker app/worker.1: at pipe (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:37:40)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Pipeline._loop (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:44:3)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].Pipeline.processIncomingMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/pipeline/index.js:13:8)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.processIncomingMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/node_modules/websocket-extensions/lib/websocket_extensions.js:133:20)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._emitMessage (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:442:22)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance._emitFrame (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:405:19)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.parse (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/hybi.js:141:18)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].instance.parse (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/driver/client.js:62:58)
Aug 17 12:15:44 Worker app/worker.1: at [object Object].IO.write (/app/node_modules/firebase/node_modules/faye-websocket/node_modules/websocket-driver/lib/websocket/streams.js:80:16)
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.ondata (_stream_readable.js:528:20)
Aug 17 12:15:44 Worker app/worker.1: at emitOne (events.js:77:13)
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.emit (events.js:169:7)
Aug 17 12:15:44 Worker app/worker.1: at readableAddChunk (_stream_readable.js:146:16)
Aug 17 12:15:44 Worker app/worker.1: at TLSSocket.Readable.push (_stream_readable.js:110:10)
Aug 17 12:15:44 Worker app/worker.1: at TLSWrap.onread (net.js:523:20)
@ frank-van-puffelen [OK]をクリックします。私が "viewing_amount"でトランザクションを実行するのと同じ時間に "watching_amount"を設定すると、トランザクションが通過しない可能性があります。 "watching_amount"を設定する代わりに更新するとどうなりますか?トランザクションの実行に関連して、兄弟パスの "更新"と "設定"に違いはありますか? –
update()とset()も同様に動作します。しかし、トランザクションが動作しているデータには影響しないため、トランザクション()を問題なく実行している場所の兄弟*を設定することができます。したがって、/ foo/barと/ foo/bazのトランザクションは正常ですが、/ foo/barのトランザクションと/ fooまたは/ foo/bar/foobarを設定するとエラーが発生します。 –
うーん...ちょっと混乱するよ。私はいつでも "view_amount"パス上に "set"をしています(更新された質問を参照)。私はアイテム自体に一般的な "更新"を行っているかもしれませんが、私は "view_amount"を更新していません。そのアイテムの子ノードでトランザクションを実行しているときにアイテム自体に「更新」を行うと、エラーが発生する可能性がありますか?その特定のアイテムとパスについて、同時に多くのトランザクションが同時に発生することがあります。それは何か問題を引き起こすだろうか? –