কম্পিউটার

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

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

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

এই উন্মত্ত সময়ে, বেশিরভাগ বিনিয়োগকারী তাদের পোর্টফোলিও সম্পর্কে দুটি ডেটা পয়েন্ট খুঁজছেন যা তাদের সর্বদা অ্যাক্সেসের প্রয়োজন:

  1. সেই সময়ে পোর্টফোলিওর মোট মান কত?
  2. তাদের পোর্টফোলিওতে নির্দিষ্ট সিকিউরিটির লাভ বা ক্ষতি কী?

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

  • এক সাথে হাজার হাজার সিকিউরিটির দাম আপডেট করা হচ্ছে
  • একসাথে লক্ষ লক্ষ গ্রাহকের অনুরোধের উত্তর দেওয়া।

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

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

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

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

এই ব্লগ পোস্টে আমরা নিম্নলিখিতগুলি কভার করব:

  • রেডিস এন্টারপ্রাইজে একটি উচ্চ-কর্মক্ষমতা এবং মাপযোগ্য সিকিউরিটিজ পোর্টফোলিও ডেটা মডেলের নমুনা বাস্তবায়ন।
  • রিয়েল-টাইমে পোর্টফোলিওতে সিকিউরিটিজের দাম আপডেট করুন কারণ ব্রোকারেজ এক্সচেঞ্জ থেকে সর্বশেষ দাম পায়।

একবার ক্লায়েন্ট অ্যাপটি পোর্টফোলিওটি পুনরুদ্ধার করে এবং সর্বশেষ দামগুলি গ্রহণ করলে, এটি করতে পারে:

  • পোর্টফোলিওর মোট পোর্টফোলিও মান গণনা করুন।
  • প্রতিটি পোর্টফোলিও হোল্ডিংয়ের লাভ বা ক্ষতি গণনা করুন।

সিকিউরিটিজ পোর্টফোলিও ডেটা মডেল

আসুন একটি পোর্টফোলিওতে একটি হোল্ডিং মডেলিং করে শুরু করি। নীচের চিত্রে, CVS Health Corp. (NYSE:CVS) হল আমাদের একটি উদাহরণ হোল্ডিং। CVS-এর দুটি আলাদা লট ছিল—প্রথমটি 4 জানুয়ারী, 2021-এ এবং দ্বিতীয়টি 1 মার্চ, 2021-এ অধিগ্রহণ করা হয়েছিল। কেনার সময় একই সংখ্যক শেয়ার কেনা হয়েছিল   প্রতিটি লটের জন্য বাণিজ্য। উভয় লেনদেন 10টি শেয়ারের জন্য ছিল, তবে বিভিন্ন শেয়ার প্রতি মূল্যে — প্রথম লটের জন্য $68.3378 এবং দ্বিতীয়টির জন্য $68.82৷ পোর্টফোলিওতে CVS ধারণের মোট পরিমাণ হল 20 যার গড় খরচ নিম্নরূপ গণনা করা হয়েছে:(($68.3378 * 10) + ($68.82 * 10))/20 =$68.5789 শেয়ার প্রতি।

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

প্রয়োজনীয়তা বাস্তবায়ন

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

এখানে ডেটা মডেল নিম্নলিখিত সত্তার উল্লেখ করে:

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

একটি ER ডায়াগ্রাম একটি ভিজ্যুয়াল উপস্থাপনা প্রদান করে যা একজনকে কী ঘটছে তা দেখতে সাহায্য করতে পারে৷

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

সামগ্রিক স্থাপত্য

এই সিস্টেম সম্পর্কে যে মূল বিষয়গুলি বিবেচনা করা দরকার তা অন্তর্ভুক্ত:

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

এই পয়েন্টগুলি দেওয়া, কিছু সাধারণ পন্থা হল:

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

এখানে প্রধান গণনামূলক উপাদান এবং ডেটা প্রবাহ রয়েছে:

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

Redis এন্টারপ্রাইজ উপাদান

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

  • RedisTimeSeries ডাটাবেস, দামের পরিবর্তনের ইতিহাসের ট্র্যাক রাখতে (পাশাপাশি যেকোন ক্লায়েন্টের জন্য অতি সাম্প্রতিক মূল্য রেকর্ড করুন)
  • পাব/সাব ব্রোকার চ্যানেল সেই চ্যানেলে সাবস্ক্রাইব করা ক্লায়েন্টদের কাছে মূল্য পরিবর্তনের বিজ্ঞপ্তিগুলি পুশ করতে (অর্থাৎ বিনিয়োগকারীরা যাদের পোর্টফোলিওতে সেই নিরাপত্তা রয়েছে)

নিম্নলিখিত চিত্রটি স্থাপত্যের এই অংশের বিশদ বিবরণ দেয়:

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

আমরা একটি নির্দিষ্ট উদাহরণ হিসাবে নিম্নলিখিত তথ্য ব্যবহার করব:

Redis এর সাথে একটি রিয়েল-টাইম ট্রেডিং প্ল্যাটফর্ম তৈরি করা

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

ডেটা মডেল A

আমাদের প্রথম বাস্তবায়ন একটি SET ব্যবহার করে অ্যাকাউন্টের সমস্ত লটের আইডি রেকর্ড করে, অ্যাকাউন্ট আইডি দ্বারা চিহ্নিত করা হয়, এবং তারপরে ক্ষেত্র হিসাবে টিকার, পরিমাণ এবং ক্রয় মূল্য সহ LOT আইডি দ্বারা চিহ্নিত প্রতি LOT প্রতি একটি Redis HASH ব্যবহার করে। অন্য কথায়, আমরা প্রতিটি অ্যাট্রিবিউট সহ LOT সত্তা কাঠামোর মডেল করতে HASH ব্যবহার করছি LOT সত্তার একটি ক্ষেত্র হচ্ছে রেডিস হ্যাশে।

এই ডেটা মডেলের সাথে আমাদের কাছে প্রতিটি অ্যাকাউন্টের জন্য একটি কী এবং একটি মান রয়েছে যাতে সেই অ্যাকাউন্টের জন্য সমস্ত LOT আইডি একটি Redis SET হিসাবে সংরক্ষিত থাকে:

lotids:<ACCOUNT_ID> SET <LOTID>

এছাড়াও, প্রতিটি লটিডের জন্য, আমাদের একটি HASH থাকবে যার ক্ষেত্রগুলি হল টিকার, পরিমাণ এবং ক্রয় মূল্য:

lot:<LOTID> HASH <ticker TICKER> <quantity INTEGER> <price INTEGER>

সুনির্দিষ্টভাবে, আমরা এই মত কীগুলি তৈরি করব:

127.0.0.1:6379> SADD lotids:ACC-1001 LOT-9001 LOT-9002(পূর্ণসংখ্যা) 2127.0.0.1:6379> HMSET লট:LOT-9001 টিকার AAPL পরিমাণ 200 মূল্য। লট:LOT-9002 টিকার CAT পরিমাণ 1200 মূল্য 18063ঠিক আছে

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

price_history:<TICKER> TIMESERIES <price INTEGER>

127.0.0.1:6379> TS.GET price_history:APPL1) (পূর্ণসংখ্যা) 16194568530612) 12572127.0.0.1:6379> TS.GET price_history:CAT1) (61218> পূর্ণসংখ্যা) (6121424) 

এবং আপডেটের জন্য মূল্যের চ্যানেলে সদস্যতা নিন:

<TICKER> SUBSCRIPTION_CHANNEL

সমস্ত ডেটা পেতে, ক্লায়েন্ট নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করবে:

  1. লটিডস-এ 1 বার sMEMBERS কী-সময় জটিলতা O(N) সঙ্গে N হল লটের সংখ্যা
  2. N বার HGETALL লটে কী-সময় জটিলতা N গুণ O(1)
  3. টি বার TS.GET price_history-এ কী - সময়ের জটিলতা T গুণ O(1) এর সাথে T হল টিকারের সংখ্যা
  4. -এ 1 বার সাবস্ক্রাইব করুন চ্যানেল - সময় জটিলতা O(T) (একজন একটি কলে সমস্ত চ্যানেল সাবস্ক্রাইব করতে পারেন)

সামগ্রিক সময়ের জটিলতা হল O(N +T)।

কংক্রিটভাবে, অপারেশন এক এবং দুই হবে:

127.0.0.1:6379> SMEMBERS lotids:ACC10011) "LOT-9001"2) "LOT-9002"127.0.0.1:6379> HGETALL লট:LOT-90011) "টিকার"2) "AAPL"3) পরিমাণ"4) "200"5) "মূল্য"6) "12556"127.0.0.1:6379> HGETALL লট:LOT-90021) "টিকার"2) "CAT"3) "পরিমাণ" 4) "1200"5) "মূল্য"6) "18063"

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

এই সীমাবদ্ধতার পরিপ্রেক্ষিতে আমরা দেখতে পাচ্ছি যে পাইপলাইনগুলিতে ক্রিয়াকলাপের নিয়োগ হল:

  • পাইপলাইন 1:অপারেশন #1 এর একক কমান্ড
  • পাইপলাইন 2:অপারেশন #2 এর সমস্ত N কমান্ড
  • পাইপলাইন 3:অপারেশন #3 এবং #4 এর সমস্ত N কমান্ড

এবং LUA স্ক্রিপ্টগুলি ব্যবহার করা সম্ভব নয় কারণ প্রতিটি অপারেশন আলাদা কী ব্যবহার করে এবং সেই কীগুলির কোনও সাধারণ অংশ নেই যা একই স্লটে হ্যাশ করা যায়৷

এই মডেলটি ব্যবহার করার সময় আমাদের কাছে O(N+T) এবং তিনটি নেটওয়ার্ক হপগুলির একটি সময় জটিলতা রয়েছে৷

ডেটা মডেল B

একটি বিকল্প মডেল হল LOT সত্তা কাঠামোকে সমতল করা এবং অ্যাকাউন্ট আইডি দ্বারা চিহ্নিত একটি কী ব্যবহার করে প্রতিটি সত্তা বৈশিষ্ট্যকে উপস্থাপন করা - প্রতিটি অ্যাট্রিবিউটের (পরিমাণ, টিকার, মূল্য) প্রচুর পরিমাণের জন্য একটি কী। প্রতিটি HASH-এর ক্ষেত্রগুলি হবে LOT ID এবং পরিমাণ, টিকার বা মূল্যের সাথে সংশ্লিষ্ট মান। সুতরাং আমাদের কী থাকবে:

tickers_by_lot: <ACCOUNT_ID> HASH <LOTID TICKER>

quantities_by_lot:<ACCOUNT_ID> HASH <LOTID INTEGER>

prices_by_lot:<ACCOUNT_ID> HASH <LOTID INTEGER>

এই হ্যাশগুলি ডেটা মডেল A থেকে LOTID এবং LOT কীগুলি প্রতিস্থাপন করবে, যখন price_history এবং <TICKER> কী একই থাকবে।

কী তৈরি করা হচ্ছে:

HSET tickers_by_lot:ACC-1001 LOT-9001 AAPL LOT-9002 CATHSET quantities_by_lot:ACC-1001 LOT-9001 200 LOT-9002 1200HSET prices_by_lot:ACC-1001 LOT-9001 L.2601L. 

মান পুনরুদ্ধার করা হচ্ছে:

127.0.0.1:6379> HGETALL টিকার্স_by_lot:ACC-10011) "LOT-9001"2) "AAPL"3) "LOT-9002"4) "CAT"127.0.0.1:6379> HGETALL পরিমাণ:C_1001 ) "LOT-9001"2) "200"3) "LOT-9002"4) "1200"127.0.0.1:6379> HGETALL দাম_by_lot:ACC-10011) "LOT-9001"2) "12556"3) "অনেক -9002"4) "18063"

ক্লায়েন্টের প্রয়োজনীয় ক্রিয়াকলাপগুলি এখন হবে:

  1. লট_পরিমাণ-এ 1 বার HGETALL কী-সময় জটিলতা N x O(1)
  2. lot_ticker-এ 1 বার HGETALL কী-সময় জটিলতা N x O(1)
  3. lot_price-এ 1 বার HGETALL কী-সময় জটিলতা N x O(1)
  4. T গুন TS.GET price_history এ কী-সময় জটিলতা T x O(1) এর সাথে T হল টিকারের সংখ্যা
  5. -এ 1 বার সাবস্ক্রাইব করুন৷ চ্যানেল-সময় জটিলতা 1 x O(T)

এতে O(N+T)-এর সামগ্রিক সময়ের জটিলতা রয়েছে—আগের মতোই।

পাইপলাইনের দৃষ্টিকোণ থেকে এটি হয়ে যায়:

  • পাইপলাইন এক—অপারেশনের সমস্ত কমান্ড #1, #2, এবং  #3
  • পাইপলাইন দুই—সকল T কমান্ড অপারেশন #4 এবং #5

তাই আমরা নেটওয়ার্ক হপের সংখ্যা এক করে কমিয়েছি - পরম পদে অনেক বেশি নয়, কিন্তু আপেক্ষিক পদে 33%।

উপরন্তু, আমরা সহজেই LUA ব্যবহার করতে পারি যেহেতু আমরা কীগুলি জানি, এবং আমরা একই স্লটে যেকোনো নির্দিষ্ট অ্যাকাউন্টের জন্য সমস্ত কী ম্যাপ করতে পারি। ক্রিয়াকলাপের সরলতার প্রেক্ষিতে আমরা LUA তে আরও খনন করব না, তবে মনে রাখবেন যে এই নকশাটি এটি অন্তত সম্ভব করে তোলে!

একটি সাধারণ বেঞ্চমার্কে, ডেটা মডেল B 4.13 ms দ্রুত দৌড়েছে (হাজার রানের উপরে বেঞ্চমার্ক)। প্রদত্ত যে এটি শুধুমাত্র একবার চালানো হয় প্রতিবার যখন একটি ক্লায়েন্ট একটি অ্যাকাউন্টের জন্য আরম্ভ করা হয়, এটি সম্ভবত সামগ্রিক কর্মক্ষমতার উপর কোন প্রভাব ফেলবে না।

সারাংশ

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

আমরা সিকিউরিটিজ পোর্টফোলিও পরিচালনার ক্ষেত্রে কিছু ব্যবসায়িক চ্যালেঞ্জ প্রবর্তন করেছি এবং নিম্নলিখিতগুলি দেখিয়েছি:

  • রিয়েল-টাইম এবং মাপযোগ্য সিকিউরিটিজ পোর্টফোলিও বাস্তবায়নের জন্য একটি রেডিস ডেটা মডেল৷
  • একটি উচ্চ-কর্মক্ষমতা, রিয়েল-টাইম মূল্য আপডেট সিস্টেম যা একটি পোর্টফোলিওর মোট মূল্য এবং প্রতিটি হোল্ডিংয়ের লাভ বা ক্ষতি গণনা করতে ব্যবহার করা যেতে পারে।

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


  1. রেডিসের সাথে TODO অ্যাপ রিমিক্স করুন

  2. এজ ক্যাশিং সহ 5 ms গ্লোবাল রেডিস লেটেন্সি

  3. ক্লাউডফ্লেয়ার কর্মীদের সাথে রেডিস @ এজ

  4. উদাহরণ সহ Redis GEORADIUSBYMEMBER কমান্ড - Redis টিউটোরিয়াল