টি এল; ডিআর:
তারা তাদের স্ট্যাকের মাইএসকিউএল নীচের অংশের সমস্ত কিছুর জন্য ক্যাশেড গ্রাফ সহ একটি স্ট্যাক আর্কিটেকচার ব্যবহার করে।
দীর্ঘ উত্তর:
আমি নিজেই এ নিয়ে কিছু গবেষণা করেছি কারণ তারা কীভাবে তাদের বিশাল পরিমাণের ডেটা পরিচালনা করে এবং এটিকে দ্রুত উপায়ে অনুসন্ধান করে তা জানতে আগ্রহী ছিলাম। আমি কাস্টমযুক্ত সামাজিক নেটওয়ার্কের স্ক্রিপ্টগুলি ব্যবহারকারী বেস বাড়ার সাথে ধীরে ধীরে অভিযোগ করা লোককে দেখেছি। আমি মাত্র 10 কে ব্যবহারকারী এবং 2.5 মিলিয়ন বন্ধুর সাথে নিজেকে কিছু বেঞ্চমার্ক করার পরে সংযোগ - এমনকি গ্রুপ অনুমতি এবং পছন্দ এবং প্রাচীরের পোস্টগুলি নিয়ে মাথা ঘামানোর চেষ্টা করছি না - এটি দ্রুত প্রমাণিত হয়েছিল যে এই পদ্ধতির ত্রুটি রয়েছে। ওয়েবটি কীভাবে আরও ভাল করা যায় সে সম্পর্কে অনুসন্ধান করার জন্য আমি কিছুটা সময় ব্যয় করেছি এবং এই অফিশিয়াল ফেসবুক নিবন্ধটি পেয়েছি:
আমি পড়া চালিয়ে যাওয়ার আগে আপনাকে প্রথম লিঙ্কটির উপস্থাপনাটি দেখার জন্য সত্যই সুপারিশ করছি। আপনি যে পর্দার সন্ধান করতে পারেন তার পিছনে FB কীভাবে কাজ করে তার সম্ভবত এটি সম্ভবত সেরা ব্যাখ্যা।
ভিডিও এবং নিবন্ধটি আপনাকে কয়েকটি বিষয় বলে:
- তারা একেবারে মাইএসকিউএল ব্যবহার করছে তাদের স্ট্যাকের নীচে করছে
- উপরেএসকিউএল ডিবি এর টিওও স্তর রয়েছে যা অন্তত দুটি স্তরের ক্যাচিং রয়েছে এবং সংযোগগুলি বর্ণনা করার জন্য গ্রাফ ব্যবহার করছে।
- তারা ক্যাশেড গ্রাফের জন্য তারা আসলে কোন সফ্টওয়্যার / ডিবি ব্যবহার করে সে সম্পর্কে আমি কিছুই পাইনি
আসুন এটি একবার দেখুন, বন্ধুত্বের সংযোগগুলি শীর্ষে বাম:
ভাল, এটি একটি গ্রাফ। :) এটি কীভাবে এসকিউএল এ এটি তৈরি করবেন তা আপনাকে জানায় না, এটি করার বিভিন্ন উপায় রয়েছে তবে এই সাইটের বিভিন্ন পদ্ধতির ভাল পরিমাণ রয়েছে।মনোযোগ: বিবেচনা করুন যে একটি রিলেশনাল ডিবি এটি হ'ল: এটি গ্রাফের কাঠামো নয়, স্বাভাবিক তথ্য সংরক্ষণ করার চিন্তা করে। সুতরাং এটি কোনও বিশেষায়িত গ্রাফ ডাটাবেসের মতো ভাল সম্পাদন করবে না।
এছাড়াও বিবেচনা করুন যে আপনাকে কেবলমাত্র বন্ধুবান্ধব বন্ধুদের তুলনায় আরও জটিল প্রশ্নগুলি করতে হবে, উদাহরণস্বরূপ যখন আপনি কোনও নির্দিষ্ট সমন্বয়ের চারপাশে সমস্ত অবস্থান ফিল্টার করতে চান যা আপনি এবং আপনার বন্ধুদের বন্ধুরা পছন্দ করেন। একটি গ্রাফ এখানে সঠিক সমাধান।
কীভাবে এটি তৈরি করা যায় তা আমি আপনাকে বলতে পারছি না যাতে এটি ভাল সঞ্চালিত হয় তবে এটির জন্য স্পষ্টভাবে কিছু ট্রায়াল এবং ত্রুটি এবং বেঞ্চমার্কিং প্রয়োজন।
এখানে আমার নেই হতাশাদায়ক জন্য পরীক্ষার মাত্র বন্ধুদের বন্ধু অনুসন্ধানের :
ডিবি স্কিমা:
CREATE TABLE IF NOT EXISTS `friends` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`friend_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
বন্ধুদের বন্ধুরা জিজ্ঞাসা:
(
select friend_id
from friends
where user_id = 1
) union (
select distinct ff.friend_id
from
friends f
join friends ff on ff.user_id = f.friend_id
where f.user_id = 1
)
আমি আপনাকে সুপারিশ করছি আপনাকে কমপক্ষে 10 কে ব্যবহারকারীর রেকর্ডস সহ প্রতিটি স্যাম্পল ডেটা তৈরি করতে এবং তাদের প্রত্যেকের কমপক্ষে 250 বন্ধু সংযোগ রয়েছে এবং তারপরে এই কোয়েরিটি চালানোর জন্য আপনাকে সুপারিশ করছি। আমার মেশিনে (i7 4770k, SSD, 16gb র্যাম) ফলাফলটি সেই প্রশ্নের জন্য ~ 0.18 সেকেন্ড ছিল । হতে পারে এটি অনুকূলিত করা যায়, আমি কোনও ডিবি প্রতিভা না (পরামর্শগুলি স্বাগত)) তবে, যদি এই স্কেলগুলি রৈখিক হয় তবে আপনি ইতিমধ্যে কেবলমাত্র 100k ব্যবহারকারীদের জন্য 1.8 সেকেন্ডে, 1 মিলিয়ন ব্যবহারকারীর জন্য 18 সেকেন্ডে
এটি এখনও k 100k ব্যবহারকারীর জন্য Okish শোনায় তবে বিবেচনা করুন যে আপনি কেবলমাত্র বন্ধুবান্ধবকে নিয়ে এসেছেন এবং " বন্ধুবান্ধব বন্ধুদের কেবল পোস্টগুলি প্রদর্শন করুন + আমার অনুমতি আছে কি না অনুমোদিত তা চেক করুন " এর মতো জটিল জটিল কোনও জিজ্ঞাসা করেননি do তাদের মধ্যে কিছু দেখতে + আমি তাদের কোনও পছন্দ করেছি কিনা তা পরীক্ষা করতে একটি সাব কোয়েরি করুন । আপনি যদি ইতিমধ্যে কোনও পোস্ট পছন্দ করেন বা না চান বা আপনার কোডটি করতে হবে তবে আপনি ডিবিটিকে চেক করতে দিতে চান। এছাড়াও বিবেচনা করুন যে এটিই আপনি চালাচ্ছেন এমন একমাত্র ক্যোয়ারী নয় এবং একই সাথে কম বা কম জনপ্রিয় সাইটে আপনার একই সময়ে সক্রিয় ব্যবহারকারীর চেয়ে বেশি রয়েছে।
আমি মনে করি যে আমার উত্তর এই প্রশ্নের উত্তর দিয়েছে যে কীভাবে ফেসবুক তাদের বন্ধুত্বের সম্পর্ককে খুব ভালভাবে ডিজাইন করেছে তবে আমি দুঃখিত যে আমি কীভাবে এটি দ্রুত কাজ করবে সেভাবে এটি কীভাবে বাস্তবায়ন করতে পারি তা বলতে পারি না। একটি সামাজিক নেটওয়ার্ক বাস্তবায়ন করা সহজ তবে এটি ভাল সম্পাদন করে তা নিশ্চিত করা স্পষ্ট নয় - আইএমএইচও।
আমি গ্রাফ-কোয়েরিগুলি করতে ওরিয়েন্টডিবি দিয়ে পরীক্ষা শুরু করেছি এবং অন্তর্নিহিত এসকিউএল ডিবিতে আমার প্রান্তগুলি ম্যাপিং করব। আমি যদি কখনও এটি সম্পন্ন করি তবে আমি এটি সম্পর্কে একটি নিবন্ধ লিখব।