जब आप दौड़ की स्थिति के तहत कोड काम करना चाहते हैं, तो आमतौर पर डेवलपर आशावादी समेकन नियंत्रण (ओसीसी) का उपयोग करता है। विकिपीडिया से:इवेंट सोर्सिंग और आशावादी समेकन नियंत्रण
... करने से पहले, प्रत्येक लेनदेन सत्यापित करता है कि कोई अन्य लेनदेन ने जो डेटा पढ़ा है उसे संशोधित किया है। जांच परस्पर विरोधी संशोधनों का पता चलता है, तो करने से लेन-देन वापस रोल ...
एक दृष्टिकोण को लागू करने के OCC जाँच कर रहा है डेटा की एक version
संशोधित करने की। यदि संस्करण अलग है, तो अन्य लेन-देन ने डेटा को संशोधित किया है और यह निर्णय लेने के लिए कि यह कैसे संघर्ष को हल करना चाहिए (पुनः प्रयास, उपयोगकर्ता को सूचित करें ...)।
एक मसौदे पर निम्नलिखित के रूप में होगा:
class Repository
{
public class save($data)
{
$currentVersion = $data->version;
$data->version = $currentVersion + 1;
$result = $this->db->update($data, [
'id' => $data->id,
'version' => $currentVersion
]);
if (1 === $result) {
// everything ok
} else {
// conflict!
}
}
}
मेरे सवाल है, EventSourcing
में के रूप में हम केवल संलग्न सभी घटनाओं है कि डोमेन में होता है, हम अब OCC लागू करने के लिए इस दृष्टिकोण का उपयोग नहीं कर सकते । EventSourcing का उपयोग करते समय ओओसी रखने के लिए अन्य दृष्टिकोण कौन से हैं?
एक विकल्प जो काम कर सकता है, यह उन्हें संग्रहीत करते समय विरोधाभासी घटनाओं के लिए खोज रहा है। यह दृष्टिकोण घटनाओं पर एक बढ़िया दाग नियंत्रण की अनुमति देता है। मुझे नहीं पता कि यह समाधान को जटिल करेगा या नहीं, यह एक "मानक" है जो मुझे लगता है कि http://danielwhittaker.me/2014/09/29/handling-concurrency-issues-cqrs-event-sourced-system/
समस्या विवरण में किसी भी अंतर की सराहना की जाती है। अग्रिम में धन्यवाद!