ইভেন্ট সোর্সিং স্টোরেজ হিসাবে একটি আরডিবিএমএস ব্যবহার করে


119

যদি আমি ইভেন্ট সোর্সিং ডেটা সঞ্চয় করার জন্য কোনও আরডিবিএমএস (যেমন এসকিউএল সার্ভার) ব্যবহার করি, তবে স্কিমাটি কেমন দেখাচ্ছে?

আমি একটি বিমূর্ত অর্থে কথা বলার কয়েকটি প্রকরণ দেখেছি, তবে কিছুই কংক্রিট নয়।

উদাহরণস্বরূপ, বলুন যে কারও একটিতে "পণ্য" সত্তা রয়েছে, এবং সেই পণ্যটির পরিবর্তনগুলি আকার: মূল্য এবং বিবরণ আকারে আসতে পারে। আমি যাচ্ছি কিনা তা নিয়ে আমি বিভ্রান্ত

  1. একটি "প্রোডাক্টসেন্ট" টেবিল রয়েছে, এটিতে একটি পণ্যটির সমস্ত ক্ষেত্র রয়েছে, যেখানে প্রতিটি পরিবর্তনের অর্থ সেই সারণিতে একটি নতুন রেকর্ড থাকে, এবং "কে, কী, কোথায়, কেন, কখন এবং কিভাবে" (ডাব্লুডাব্লুডাব্লুডাব্লুডাব্লুএইচ) উপযুক্ত হিসাবে। যখন ব্যয়, দাম বা বিবরণ পরিবর্তন করা হয়, পণ্যটির প্রতিনিধিত্ব করতে যোগ করা সম্পূর্ণ নতুন সারি।
  2. পৃথক টেবিলগুলিতে পণ্যের মূল্য, মূল্য এবং বিবরণ স্টোর করুন কোনও বিদেশী কী সম্পর্কের সাথে পণ্য টেবিলে যোগ দিলেন। যখন এই বৈশিষ্ট্যগুলির পরিবর্তন ঘটে, যথাযথভাবে ডাব্লুডাব্লুডাব্লুডাব্লুএইচ দিয়ে নতুন সারি লিখুন।
  3. একটি "প্রোডাক্টসেন্ট" টেবিলের মধ্যে ডাব্লুডাব্লুডাব্লুডাব্লুডাব্লুএইচ, সেই সাথে ইভেন্টটি উপস্থাপন করে এমন সিরিয়ালযুক্ত বস্তু সংরক্ষণ করুন, অর্থাত্ কোনও প্রদত্ত পণ্যের জন্য অ্যাপ্লিকেশন রাষ্ট্রটি পুনর্নির্মাণের জন্য ইভেন্টটি নিজেই লোড করা, ডি-সিরিয়ালাইজড এবং আমার অ্যাপ্লিকেশন কোডটিতে পুনরায় খেলতে হবে meaning ।

বিশেষত আমি উপরের বিকল্প 2 সম্পর্কে চিন্তিত। চূড়ান্তভাবে নেওয়া, পণ্য সারণি প্রায় এক-টেবিল-সম্পত্তি হিসাবে সম্পত্তি হবে, যেখানে প্রদত্ত পণ্যের জন্য অ্যাপ্লিকেশন স্টেটটি লোড করতে প্রতিটি পণ্যের ইভেন্ট টেবিল থেকে সেই পণ্যটির জন্য সমস্ত ইভেন্ট লোড করা প্রয়োজন। এই টেবিল-বিস্ফোরণটি আমার কাছে দুর্গন্ধযুক্ত।

আমি নিশ্চিত "এটি নির্ভর করে", এবং কোনও একক "সঠিক উত্তর" না থাকাকালীন আমি কী গ্রহণযোগ্য, এবং যা সম্পূর্ণ গ্রহণযোগ্য নয় তার অনুভূতি পাওয়ার চেষ্টা করছি। আমি এটাও সচেতন যে নোএসকিউএল এখানে সহায়তা করতে পারে, যেখানে ইভেন্টগুলি সামগ্রিক মূলের বিরুদ্ধে সংরক্ষণ করা যেতে পারে, যার অর্থ ঘটনাগুলি থেকে পুনর্নির্মাণের জন্য ডেটাবেসকে কেবলমাত্র একক অনুরোধ, তবে আমরা কোনও নূএসকিউএল ডিবি ব্যবহার করছি না মুহূর্ত তাই আমি বিকল্প জন্য প্রায় অনুভব করছি।


2
এর সর্বাধিক সহজ আকারে: [ইভেন্ট] {সমষ্টিগত আইডি, সমষ্টিগত সংস্করণ, ইভেন্টপ্যলোড} সামগ্রিক ধরণের প্রয়োজন নেই, তবে আপনি এটি বিকল্পভাবে সংরক্ষণ করতে পারেন। ইভেন্টের ধরণের দরকার নেই তবে আপনি এটি বিকল্পভাবে সংরক্ষণ করতে পারেন। এটি ঘটে যাওয়া বিষয়গুলির একটি দীর্ঘ তালিকা, অন্য কোনও কিছুই কেবলমাত্র অনুকূলকরণ।
ইয়ভেস রেইনআউট

7
অবশ্যই # 1 এবং # 2 থেকে দূরে থাকুন। সবকিছুকে একটি পুষ্পে সিরিয়াল করুন এবং সেভাবে সংরক্ষণ করুন।
জোনাথন অলিভার

উত্তর:


109

ইভেন্ট স্টোরটি ইভেন্টের নির্দিষ্ট ক্ষেত্র বা বৈশিষ্ট্য সম্পর্কে জানতে হবে না। অন্যথায় আপনার মডেলটির প্রতিটি সংশোধনীর ফলস্বরূপ আপনার ডাটাবেস স্থানান্তরিত করতে হবে (ঠিক যেমন পুরাতন ফ্যাশন রাষ্ট্র-ভিত্তিক দৃ pers়তা হিসাবে)। অতএব আমি বিকল্প 1 এবং 2 এ মোটেই সুপারিশ করব না।

নীচে এনসিকিআরএস-এ ব্যবহৃত স্কিমাটি রয়েছে । আপনি দেখতে পাচ্ছেন, "ইভেন্টস" সারণীটি সম্পর্কিত তথ্য একটি সিএলওবি (যেমন জেএসএন বা এক্সএমএল) হিসাবে সঞ্চয় করে। এটি আপনার বিকল্প 3 এর সাথে মিলে যায় (কেবলমাত্র "প্রোডাক্টসভেেন্টস" টেবিলটি নেই কারণ আপনার কেবল একটি জেনেরিক "ইভেন্টস" টেবিলের প্রয়োজন N সমষ্টিগত রুট।)

Table Events:
    Id [uniqueidentifier] NOT NULL,
    TimeStamp [datetime] NOT NULL,

    Name [varchar](max) NOT NULL,
    Version [varchar](max) NOT NULL,

    EventSourceId [uniqueidentifier] NOT NULL,
    Sequence [bigint], 

    Data [nvarchar](max) NOT NULL

Table EventSources:
    Id [uniqueidentifier] NOT NULL, 
    Type [nvarchar](255) NOT NULL, 
    Version [int] NOT NULL

জোনাথন অলিভার ইভেন্ট স্টোর বাস্তবায়নের এসকিউএল দৃ pers়তা প্রক্রিয়াটি মূলত একটি বিএলএলবি ফিল্ড "পেওলোড" সহ "কমিটস" নামে একটি টেবিল নিয়ে গঠিত। এটি এনসিকিআরএস-এর মতো একই, কেবল এটি ইভেন্টের বৈশিষ্ট্যগুলিকে বাইনারি বিন্যাসে সিরিয়াল করে তোলে (উদাহরণস্বরূপ, এনক্রিপশন সমর্থন যুক্ত করে)।

গ্রেগ ইয়ং অনুরূপ পদ্ধতির প্রস্তাব দেয়, যেমন গ্রেগের ওয়েবসাইটে ব্যাপকভাবে নথিভুক্ত করা হয়

তাঁর প্রোটোটাইপিকাল "ইভেন্টস" টেবিলের স্কিমাটি পড়ে:

Table Events
    AggregateId [Guid],
    Data [Blob],
    SequenceNumber [Long],
    Version [Int]

9
চমৎকার উত্তর! ইভেন্টসোর্সিংটি ব্যবহার করার জন্য আমি যে প্রধান যুক্তিটি পড়তে থাকি তা হ'ল ইতিহাসকে জিজ্ঞাসা করার ক্ষমতা। সমস্ত আকর্ষণীয় ডেটা এক্সএমএল বা জেএসএন হিসাবে ক্রমযুক্ত করার সময় আমি কীভাবে একটি প্রতিবেদনের সরঞ্জাম তৈরি করতে যাচ্ছি যা অনুসন্ধানে দক্ষ? টেবিল ভিত্তিক সমাধানের জন্য কোনও আকর্ষণীয় নিবন্ধ রয়েছে?
মারিজন হুইজেন্ডভেল্ড

11
@ মারিজনহুইজেন্ডভেল্ড আপনি সম্ভবত ইভেন্ট স্টোরের বিপরীতে জিজ্ঞাসা করতে চান না। সর্বাধিক সাধারণ সমাধান হ'ল বেশ কয়েকটি ইভেন্ট হ্যান্ডলারের তালিকাভুক্ত করা যা ইভেন্টগুলি রিপোর্টিং বা বিআই ডাটাবেসে রূপান্তর করে। এই হ্যান্ডলারগুলির বিরুদ্ধে ইভেন্টের ইতিহাস পুনরায় খেলুন।
ডেনিস ট্রাব

1
@ ডেনিস ট্রাব আপনার উত্তরের জন্য ধন্যবাদ। ইভেন্ট স্টোরের বিরুদ্ধে কেন জিজ্ঞাসা করা হচ্ছে না? আমি আশঙ্কা করছি এটি প্রতিপন্ন হবে / তীব্র হয়ে উঠবে যদি প্রতিবার নতুন বিআই কেস নিয়ে আসার সময় যদি আমাদের পুরো ইতিহাসটি পুনরায় খেলতে হয়?
মেরিজন হুইজেন্ডভেল্ড

1
আমি ভেবেছিলাম যে এক পর্যায়ে আপনার কাছে ইভেন্ট স্টোরের পাশাপাশি টেবিলও থাকার কথা ছিল, এটি সর্বশেষ অবস্থায় মডেল থেকে ডেটা সংরক্ষণ করার জন্য? এবং আপনি মডেলটিকে একটি পঠন মডেল এবং একটি লেখার মডেল হিসাবে বিভক্ত করেন। লেখার মডেল ইভেন্ট স্টোরের বিপরীতে যায় এবং ইভেন্ট স্টোর মার্টিয়ালগুলি পঠন মডেলের আপডেট হয়। পঠন মডেলটিতে এমন সারণী রয়েছে যা আপনার সিস্টেমে সত্তার প্রতিনিধিত্ব করে - যাতে আপনি প্রতিবেদন এবং দেখার জন্য পঠন মডেলটি ব্যবহার করতে পারেন। আমি অবশ্যই কিছু ভুল বুঝেছি।
দ্য বোরিংকোডার

10
@ থাইবোরিংকডার মনে হচ্ছে আপনার ইভেন্ট সোর্সিং এবং সিকিউআরএস বিভ্রান্ত হয়েছে বা কমপক্ষে আপনার মাথায় ছাঁটাই হয়েছে। এগুলি প্রায়শই একসাথে পাওয়া যায় তবে তারা একই জিনিস নয়। সিক্যুআরএস আপনি নিজের পড়া এবং লেখার মডেলগুলি আলাদা করেছেন যখন ইভেন্ট সোর্সিং আপনার অ্যাপ্লিকেশনটিতে সত্যের একক উত্স হিসাবে ইভেন্ট স্ট্রিম ব্যবহার করেছেন।
ব্রায়ান অ্যান্ডারসন

7

গিটিহাব প্রকল্পের সিকিউআরএস.এনইটের কয়েকটি ভিন্ন প্রযুক্তিতে আপনি কীভাবে ইভেন্টস্টোরগুলি করতে পারবেন তার কয়েকটি দৃ concrete উদাহরণ রয়েছে। লেখার সময় সেখানে একটি বাস্তবায়ন এসকিউএল Linq2SQL ব্যবহার এবং একটি এসকিউএল স্কিমা , সেখানে এক এটা সঙ্গে যেতে MongoDB জন্য এক DocumentDB (CosmosDB আপনি নভোনীল আছেন) এবং একটি ব্যবহার EventStore (যেমন উপরে উল্লিখিত)। টেবিল স্টোরেজ এবং ব্লব স্টোরেজ এর মতো অ্যাজুরেতে আরও রয়েছে যা ফ্ল্যাট ফাইল স্টোরেজের সাথে খুব সমান।

আমার ধারণা এখানে মূল কথাটি হ'ল তারা সকলেই একই অধ্যক্ষ / চুক্তি অনুসারে চলে। তারা সমস্ত তথ্য একক স্থানে / ধারক / সারণীতে সঞ্চয় করে, তারা অন্যের থেকে একটি ইভেন্ট সনাক্ত করতে মেটাডেটা ব্যবহার করে এবং পুরো ঘটনাটিকে যেমন 'ঠিক' সংরক্ষণ করে - কিছু ক্ষেত্রে সিরিয়ালযুক্ত, সমর্থনকারী প্রযুক্তিগুলিতে যেমন ছিল। সুতরাং আপনি যদি কোনও ডকুমেন্ট ডাটাবেস, রিলেশনাল ডাটাবেস বা এমনকি ফ্ল্যাট ফাইল চয়ন করেন তার উপর নির্ভর করে, ইভেন্ট স্টোরের একই অভিপ্রায়টি অর্জনের বিভিন্ন উপায় রয়েছে (আপনি যদি কোনও মুহূর্তে নিজের মত বদল করেন এবং আপনাকে স্থানান্তরিত করতে বা সমর্থন প্রয়োজন বলে মনে করেন তবে এটি কার্যকর একাধিক স্টোরেজ প্রযুক্তি)।

প্রকল্পটির বিকাশকারী হিসাবে আমি আমাদের করা কিছু পছন্দ সম্পর্কে কিছু অন্তর্দৃষ্টি ভাগ করতে পারি।

প্রথমত আমরা খুঁজে পেয়েছি (এমনকি পূর্ণসংখ্যার পরিবর্তে অনন্য ইউআইডি / জিইউআইডি থাকা সত্ত্বেও) অনেক কারণে কৌশলগত কারণে ক্রমিক আইডি ঘটে থাকে, সুতরাং কেবল একটি আইডি থাকা কোনও কীটির পক্ষে যথেষ্ট অনন্য ছিল না, তাই আমরা আমাদের মূল আইডি কী কলামটি ডেটা / এর সাথে একীভূত করেছিলাম সত্যিকারের (আপনার প্রয়োগের অর্থে) অনন্য কী কী হওয়া উচিত তা তৈরি করতে অবজেক্টের ধরণ। আমি জানি কিছু লোক বলে যে এটি সংরক্ষণ করার দরকার নেই, তবে এটি নির্ভর করে যদি আপনি গ্রিনফিল্ড হন বা বিদ্যমান সিস্টেমের সাথে সহ-বিদ্যমান থাকেন।

রক্ষণাবেক্ষণের কারণে আমরা একটি একক ধারক / টেবিল / সংগ্রহের সাথে আটকেছি, তবে আমরা প্রতি সত্তা / অবজেক্টের জন্য পৃথক টেবিল নিয়ে খেলেছি। আমরা অনুশীলনে পেয়েছি যার অর্থ হয় অ্যাপ্লিকেশনটির "ক্রিয়েট" অনুমতিগুলির প্রয়োজন ছিল (যা সাধারণত কথা বলা ভাল ধারণা নয় ... সাধারণত সর্বদা ব্যতিক্রম / ব্যতিক্রম থাকে) বা প্রতিবার কোনও নতুন সত্তা / বস্তু অস্তিত্ব নিয়ে এসেছিল বা স্থাপন করা হয়েছিল, নতুন ছিল স্টোরেজ পাত্রে / টেবিল / সংগ্রহ করা প্রয়োজন। আমরা দেখতে পেয়েছি এটি স্থানীয় বিকাশের জন্য বেদনাদায়কভাবে ধীর এবং উত্পাদন স্থাপনার জন্য সমস্যাযুক্ত matic আপনি নাও পারেন তবে এটি ছিল আমাদের আসল-জগতের অভিজ্ঞতা।

আর একটি জিনিস মনে রাখবেন তা হল এক্স এক্সকে জিজ্ঞাসা করার ফলে বিভিন্ন ঘটনা ঘটতে পারে, এইভাবে কোনও কমান্ড / ইভেন্ট / যেটি কখনও কার্যকর by এগুলি বিভিন্ন বস্তুর বিভিন্ন ধরণের হতে পারে যেমন শপিং কার্টে "ক্রয়" চাপানো অ্যাকাউন্ট এবং গুদামজাত ইভেন্টগুলিতে আগুন লাগিয়ে দিতে পারে। গ্রাসকারী অ্যাপ্লিকেশনটি এই সমস্তটি জানতে চাইতে পারে, তাই আমরা একটি CorrelationId যুক্ত করেছি। এর অর্থ একটি ভোক্তা তাদের অনুরোধের ফলে উত্থাপিত সমস্ত ইভেন্টের জন্য জিজ্ঞাসা করতে পারে। আপনি এটি স্কিমাতে দেখতে পাবেন ।

বিশেষত এসকিউএল-এর সাথে, আমরা দেখতে পেয়েছি যে সূচি এবং পার্টিশন যথাযথভাবে ব্যবহার না করা হলে পারফরম্যান্স সত্যই বাধা হয়ে দাঁড়ায়। মনে রাখবেন ইভেন্টগুলি যদি স্ন্যাপশট ব্যবহার করে থাকে তবে বিপরীত ক্রমে প্রবাহিত হওয়া দরকার। আমরা কয়েকটি পৃথক সূচী চেষ্টা করে দেখেছি যে বাস্তবে, উত্পাদিত বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলি ডিবাগ করার জন্য কিছু অতিরিক্ত সূচিপত্রের প্রয়োজন হয়েছিল। আবার আপনি এটি স্কিমাতে দেখতে পাবেন ।

উত্পাদন ভিত্তিক তদন্তের সময় অন্যান্য ইন-প্রোডাকশন মেটাডেটা কার্যকর ছিল, টাইমস্ট্যাম্পগুলি ক্রমগুলি যাতে ক্রমাগতভাবে উত্থাপিত হয়েছিল তার ক্রমটি অন্তর্দৃষ্টি দেয়। এটি আমাদের বিশেষত ভারী ইভেন্ট চালিত সিস্টেমে কিছুটা সহায়তা দিয়েছে যা প্রচুর পরিমাণে ইভেন্ট উত্থাপন করেছিল, যা আমাদের নেটওয়ার্ক জুড়ে এবং সিস্টেম বিতরণের মতো জিনিসের কর্মক্ষমতা সম্পর্কে তথ্য দেয়।


ধন্যবাদ দারুণ। যেমনটি ঘটেছিল, এই প্রশ্নটি লেখার অনেক আগে থেকেই, আমি আমার ইনফারিগামির অংশ হিসাবে নিজেকে কয়েকজন তৈরি করেছি ithগিতুবতে রিগালোর লাইব্রেরি। রাভেনডিবি, এসকিউএল সার্ভার এবং ইভেন্টস্টোর বাস্তবায়ন। একটি হাসিখুশি জন্য একটি ফাইল-ভিত্তিক একটি সম্পর্কে ভেবে অবাক হলেন। :)
নীল বার্নওয়েল

1
চিয়ার্স। আমি উত্তরটি মূলত অন্যদের জন্য জুড়েছি যারা সাম্প্রতিক সময়ে এটি এসেছে এবং কেবল ফলাফলের পরিবর্তে শিখেছি কিছু পাঠ ভাগ করে নিয়েছে।
সিডিএমডোটনেট

3

ঠিক আছে আপনি ডেটামিকের উপর নজর দিতে চান।

ডেটামিক হ'ল নমনীয়, সময়ভিত্তিক তথ্য , সমর্থনকারী ক্যোয়ারী এবং ইলাস্টিক স্কেলাবিলিটি এবং এসিডি লেনদেনের সাথে যোগ দেয় of

আমি এখানে একটি বিস্তারিত উত্তর লিখেছি

আপনি স্টুয়ার্ট হলোভেয়ের একটি আলোচনা এখানে ডেটামিকের নকশা ব্যাখ্যা করে দেখতে পারেন

যেহেতু ডেটামিকগুলি সময় মতো তথ্যাদি সঞ্চয় করে তাই আপনি এটিকে ইভেন্ট স্যুরসিং ব্যবহারের ক্ষেত্রে ব্যবহার করতে পারেন এবং আরও অনেক কিছু।


2

আমি মনে করি আপনার ডোমেন মডেলটি বিকশিত হওয়ার সাথে সাথে সমাধান (1 এবং 2) খুব দ্রুত একটি সমস্যায় পরিণত হতে পারে। নতুন ক্ষেত্রগুলি তৈরি করা হয়, কিছুগুলির অর্থ পরিবর্তিত হয় এবং কিছুগুলি আর ব্যবহার করা যায় না। অবশেষে আপনার টেবিলটিতে কয়েক'শ nlalable ক্ষেত্র থাকবে এবং ইভেন্টগুলি লোড করা গোলযোগ হবে।

এছাড়াও, মনে রাখবেন যে ইভেন্ট স্টোরটি কেবল লেখকের জন্য ব্যবহার করা উচিত, আপনি ইভেন্টগুলি লোড করার জন্য এটি কেবল অনুসন্ধান করেন, সামগ্রীর বৈশিষ্ট্যগুলি নয়। এগুলি পৃথক জিনিস (এটি সিকিউআরএসের মূল বিষয়)।

সমাধান 3 লোকেরা সাধারণত যা করেন, তা সম্পাদন করার বিভিন্ন উপায় রয়েছে।

উদাহরণস্বরূপ, এসকিউএল সার্ভারের সাথে যখন ইভেন্টফ্লো সিকিউআরএস ব্যবহার করা হয় তখন এই স্কিমাটি দিয়ে একটি সারণী তৈরি করে:

CREATE TABLE [dbo].[EventFlow](
    [GlobalSequenceNumber] [bigint] IDENTITY(1,1) NOT NULL,
    [BatchId] [uniqueidentifier] NOT NULL,
    [AggregateId] [nvarchar](255) NOT NULL,
    [AggregateName] [nvarchar](255) NOT NULL,
    [Data] [nvarchar](max) NOT NULL,
    [Metadata] [nvarchar](max) NOT NULL,
    [AggregateSequenceNumber] [int] NOT NULL,
 CONSTRAINT [PK_EventFlow] PRIMARY KEY CLUSTERED 
(
    [GlobalSequenceNumber] ASC
)

কোথায়:

  • GlobalSequenceNumber : আপনি যখন নিজের প্রজেকশন (রিডমডেল) তৈরি করেন তখন সাধারণ গ্লোবাল শনাক্তকরণ, অনুপস্থিত ইভেন্টগুলি অর্ডার বা সনাক্ত করার জন্য ব্যবহার করা যেতে পারে।
  • ব্যাচআইডি : ইভেন্টগুলির গোষ্ঠীর একটি পরিচয় যা পরমাণুভাবে Tোকানো হয়েছিল (টিবিএইচ, কেন এটি দরকারী হবে তা জানেন না)
  • সমষ্টিগত : সমষ্টি চিহ্নিতকরণ
  • ডেটা : সিরিয়ালযুক্ত ইভেন্ট
  • মেটাডেটা : ইভেন্ট থেকে অন্যান্য দরকারী তথ্য (উদাহরণস্বরূপ, ডিসিরিয়ালাইজ, টাইমস্ট্যাম্প, কমান্ড থেকে প্রবর্তক আইডি ইত্যাদির জন্য ব্যবহৃত ইভেন্টের प्रकार)
  • সমষ্টিগত সিকোয়েন্স নাম্বার: একই সমষ্টিগুলির মধ্যে সিকোয়েন্স নম্বর (যদি আপনি লেখার ক্রম ছাড়াই না করতে পারেন তবে এটি দরকারী is

তবে, আপনি যদি স্ক্র্যাচ থেকে তৈরি করছেন তবে আমি YAGNI নীতি অনুসরণ করে এবং আপনার ব্যবহারের ক্ষেত্রে ন্যূনতম প্রয়োজনীয় ক্ষেত্রগুলি দিয়ে তৈরি করব rec


আমি যুক্তি দিয়ে বলব যে ব্যাচআইড সম্ভবত CorrelationId এবং CausationId এর সাথে সম্পর্কিত হতে পারে। কী কী ইভেন্টগুলি ঘটেছে তা নির্ধারণ করতে এবং প্রয়োজনে সেগুলি একত্রিত করার জন্য ব্যবহৃত হয়।
ড্যানিয়েল পার্ক

এটা হতে পারে. তবে এটি এটি তাই, এটি কাস্টমাইজ করার একটি উপায় সরবরাহ করা বুদ্ধিমান হবে (উদাহরণস্বরূপ অনুরোধের আইডি হিসাবে সেটিংস), তবে কাঠামোটি এটি করে না।
ফ্যাবিও মাররেকো

1

সম্ভাব্য ইঙ্গিতটি হ'ল "ধীরে ধীরে পরিবর্তনশীল মাত্রা" (টাইপ = 2) এর পরে নকশা তৈরি করা আপনাকে আবরণ করতে সহায়তা করবে:

  • সংঘটিত ইভেন্টের ক্রম (সারোগেট কী মাধ্যমে)
  • প্রতিটি রাষ্ট্রের স্থায়িত্ব (বৈধ থেকে বৈধ)

বাম ভাঁজ ফাংশন বাস্তবায়নের জন্যও ঠিক হওয়া উচিত, তবে আপনাকে ভবিষ্যতের ক্যোয়ারী জটিলতার কথা ভাবতে হবে।


1

আমি মনে করি এটি একটি দেরিতে উত্তর হবে তবে আমি উল্লেখ করতে চাই যে আপনার থ্রুপুট প্রয়োজনীয়তা বেশি না হলে ইভেন্ট সোর্সিং স্টোরেজ হিসাবে আরডিবিএমএস ব্যবহার করা সম্পূর্ণভাবে সম্ভব। আমি কেবল একটি ইভেন্ট-স্যোসিংয়ের খাত্তরের উদাহরণ দেখাব যা আমি বর্ণনা করতে পারি build

https://github.com/andrewkkchan/client-ledger-service উপরেরটি একটি ইভেন্ট সোর্সিং খাতা ওয়েব পরিষেবা। https://github.com/andrewkkchan/client-ledger-core-db এবং উপরের আমি আরডিবিএমএস রাজ্যগুলি গণনা করতে ব্যবহার করি যাতে আপনি আরডিবিএমএসের সাথে লেনদেনের সহায়তার মতো সমস্ত সুবিধা উপভোগ করতে পারেন। https://github.com/andrewkkchan/client-ledger-core-memory এবং আমার কাছে আরও একটি গ্রাহক রয়েছে যা ফেটে পরিচালনা করতে মেমোরিতে প্রসেসিং করছে।

উপরের আসল ইভেন্ট স্টোরটি এখনও কাফকার মধ্যে বাস করে - ততক্ষণে যখন আরডিবিএমএস সন্নিবেশ করার জন্য ধীর হয় বিশেষত যখন সন্নিবেশ সর্বদা সংযুক্ত থাকে।

আমি আশা করি কোডটি আপনাকে এই প্রশ্নের জন্য ইতিমধ্যে সরবরাহ করা খুব ভাল তাত্ত্বিক উত্তরগুলি বাদ দিয়ে একটি চিত্রণ দিতে সহায়তা করবে।


ধন্যবাদ। আমি দীর্ঘদিন ধরে একটি এসকিউএল-ভিত্তিক বাস্তবায়ন তৈরি করেছি। আপনি কোথাও ক্লাস্টারযুক্ত কীটির জন্য অকার্যকর পছন্দ না করেই কেন কোনও আরডিবিএমএস সন্নিবেশগুলির জন্য ধীর হয়ে যায় তা আমি নিশ্চিত নই। কেবলমাত্র পরিমার্জন করা ঠিক হবে।
নিল বার্নওয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.