Leider habe ich nun mit gleichzeitigen Endpunkten zu tun, die die benutzerdefinierten Felder (custom_fields) eines Nutzers gleichzeitig aktualisieren, wodurch die von mir als :text gesetzten Werte zu Arrays werden.
Hilfe wäre willkommen! Dies blockiert derzeit mein gesamtes Projekt.
Ich stoße auf dieses Problem in Version 2.5.0.beta7 in der lokalen Entwicklung.
Gibt es eine Möglichkeit, in diesem Fall eine Sperre auf der Datenbank zu setzen, bis die Werte gespeichert sind?
Beachten Sie, dass, wenn zwei Transaktionen gleichzeitig in zwei Threads ausgeführt werden, jeder Thread die Änderungen der anderen Transaktion nicht sieht, bis sie erfolgreich commitet wurden. Er sieht jedoch seine eigenen Änderungen (dies ist eine vereinfachte Erklärung; die Realität ist viel komplexer).
Leider muss ich jetzt möglicherweise gleichzeitig sensible Daten aktualisieren. Ich denke, das liegt daran, dass ich dies über Endpunkte tue, aber das ist die einzige Möglichkeit, die ich habe, und ich habe keine Kontrolle über die Aufrufe. Es kann ein Aufruf sein, es können auch 10 sein.
Ich kann versuchen, die Aufrufe von der App aus zu minimieren und einige Daten gebündelt zu senden. Das Problem ist jedoch, dass es zwei Quellen für die Aufrufe gibt: Mobilgeräte und externe Dienste.
Das klingt nach dem bestehenden Verhalten von benutzerdefinierten Feldern und nicht nach einer Regression. Es gibt mehrere Möglichkeiten, dies zu beheben:
Sie können einen eindeutigen Index für das benutzerdefinierte Feld (name, user_id) hinzufügen.
Sie können Ihren Code mit einem DistributedMutex umgeben.
Sie können ein Tabellendesign anstelle von benutzerdefinierten Feldern verwenden.
Darüber hinaus werde ich die Logik so ändern, dass die Aufrufe nacheinander und nicht alle gleichzeitig ausgeführt werden, was hoffentlich Probleme vermeidet.