ফেসবুকের ডাটাবেজের ডিজাইন?


133

আমি সবসময়ই ভাবছিলাম যে কীভাবে ফেসবুক বন্ধুর <-> ব্যবহারকারীর সম্পর্ক তৈরি করেছে।

আমি ব্যবহারকারীর টেবিলটি এই জাতীয় কিছু:

user_email PK
user_id PK
password 

আমি ব্যবহারকারীর ডেটা (লিঙ্গ, বয়স ইত্যাদি ব্যবহারকারীর ইমেলের মাধ্যমে সংযুক্ত যা আমি ধরে নেব) দিয়ে টেবিলটি চিত্রিত করেছি।

কীভাবে এটি এই ব্যবহারকারীর সাথে সমস্ত বন্ধুকে সংযুক্ত করে?

এটার মতো কিছু?

user_id
friend_id_1
friend_id_2
friend_id_3
friend_id_N 

সম্ভবত না. কারণ ব্যবহারকারীর সংখ্যা অজানা এবং প্রসারিত হবে।


13
একটি ফেসবুক ইঞ্জিনিয়ারিং পৃষ্ঠা রয়েছে যা এই ধরণের তথ্য প্রচুর পরিমাণে রয়েছে তবে আপনি যা জিজ্ঞাসা করছেন তা পুরোপুরি নয়। আপনি সেখানে জিজ্ঞাসা করতে এবং উত্তর পেতে পারেন কিনা তা দেখতে চাইতে পারেন। ফেসবুক
ফিফেসবুক ইন্জিনিয়ারিং

1
গুগল graph database। নিশ্চিত এটা না একটি RDBMS।

উত্তর:


90

এমন একটি ফ্রেন্ড টেবিল রাখুন যা ইউজারআইডি এবং তারপরে বন্ধুর ইউজারআইডি (আমরা এটিকে ফ্রেন্ডআইডি বলব)। উভয় কলামই ব্যবহারকারীর টেবিলে বিদেশী কী হবে keys

কিছুটা কার্যকর উদাহরণ:

Table Name: User
Columns:
    UserID PK
    EmailAddress
    Password
    Gender
    DOB
    Location

TableName: Friends
Columns:
    UserID PK FK
    FriendID PK FK
    (This table features a composite primary key made up of the two foreign 
     keys, both pointing back to the user table. One ID will point to the
     logged in user, the other ID will point to the individual friend
     of that user)

ব্যবহারের উদাহরণ:

Table User
--------------
UserID EmailAddress Password Gender DOB      Location
------------------------------------------------------
1      bob@bob.com  bobbie   M      1/1/2009 New York City
2      jon@jon.com  jonathan M      2/2/2008 Los Angeles
3      joe@joe.com  joseph   M      1/2/2007 Pittsburgh

Table Friends
---------------
UserID FriendID
----------------
1      2
1      3
2      3

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


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

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

1
এতে বলা হয়েছে যে ফেসবুকের প্রায় 1'000'000'000 ব্যবহারকারী রয়েছে। যদি গড় ব্যবহারকারীর 100 জন বন্ধু থাকে তবে এর অর্থ হল টেবিলে 100'000'000'000 সারি থাকবে। মাইএসকিউএল বিভাজন?
ভিজিলেস

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

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

51

নিম্নলিখিত ডাটাবেস স্কিমাটি দেখুন, আনাতোলি লুবারস্কি দ্বারা বিযুক্ত বিপরীতে ইঞ্জিনিয়ার :

ফেসবুক স্কিমা


7
এটি একটি বর্গ ডায়াগ্রাম, কোনও ডাটাবেস স্কিমা নয়
লেবু রস

2
তাহলে কি প্রতিটি "ব্যবহারকারী" এর নিজস্ব ডেডিকেটেড ডাটাবেস থাকবে? উপরের মতো? এটা কিভাবে কাজ করবে? উদাহরণস্বরূপ যখন ব্যবহারকারী
এফবিতে লগইন করে

এই স্টোরটি কেবল ব্যবহারকারীর সাথে সম্পর্কিত তথ্যই রয়েছে, আমি বিশেষত পোস্ট এবং এর দর্শকদের জন্য অনুসন্ধান করছি?
ওয়াসিম আহমেদ না

47

টি এল; ডিআর:

তারা তাদের স্ট্যাকের মাইএসকিউএল নীচের অংশের সমস্ত কিছুর জন্য ক্যাশেড গ্রাফ সহ একটি স্ট্যাক আর্কিটেকচার ব্যবহার করে।

দীর্ঘ উত্তর:

আমি নিজেই এ নিয়ে কিছু গবেষণা করেছি কারণ তারা কীভাবে তাদের বিশাল পরিমাণের ডেটা পরিচালনা করে এবং এটিকে দ্রুত উপায়ে অনুসন্ধান করে তা জানতে আগ্রহী ছিলাম। আমি কাস্টমযুক্ত সামাজিক নেটওয়ার্কের স্ক্রিপ্টগুলি ব্যবহারকারী বেস বাড়ার সাথে ধীরে ধীরে অভিযোগ করা লোককে দেখেছি। আমি মাত্র 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 তাদের মধ্যে কিছু দেখতে + আমি তাদের কোনও পছন্দ করেছি কিনা তা পরীক্ষা করতে একটি সাব কোয়েরি করুন । আপনি যদি ইতিমধ্যে কোনও পোস্ট পছন্দ করেন বা না চান বা আপনার কোডটি করতে হবে তবে আপনি ডিবিটিকে চেক করতে দিতে চান। এছাড়াও বিবেচনা করুন যে এটিই আপনি চালাচ্ছেন এমন একমাত্র ক্যোয়ারী নয় এবং একই সাথে কম বা কম জনপ্রিয় সাইটে আপনার একই সময়ে সক্রিয় ব্যবহারকারীর চেয়ে বেশি রয়েছে।

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

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


সুতরাং .. আপনি কখনও নিবন্ধ লিখতে কাছাকাছি পেয়েছিলাম?
ফ্লোইউআই সিম্পলআইটিস্টিং ডটকম

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

এখনও না. তবে ওরিয়েন্টডিবি ডকুমেন্টেশনটি বন্ধুত্বের সংযোগগুলি ব্যাখ্যা করে এবং অন্যান্য সমস্ত বিষয়গুলি একবার বেসিকগুলি বোঝার পরে মডেল করা যায়। orientdb.com / ডকস / ২.১ / টিউটোরিয়াল- ওয়ার্কিং- উইথ-অনুচ্ছেদ এইচটিএমএল যদি আপনি ভিত্তি হিসাবে কোনও রিলেশনাল ডিবি ব্যবহার করতে চান তবে আপনার আপডেট করার জন্য আপনার "সেভ করার পরে" এবং "মুছার পরে" কলব্যাকগুলিতে কিছু কোড যুক্ত করা দরকার গ্রাফ ডিবি (যা আপনি ডেটা পড়ার জন্য ব্যবহার করবেন)। আপনার যদি এ জাতীয় কলব্যাকগুলি প্রয়োগ না করে তবে আমার ধারণা প্রায় সব ধরণের ওআরএম বাস্তবায়ন এবং ফ্রেমওয়ার্কগুলিতে এরকম কিছু রয়েছে। আসলে ওরিয়েন্টডিবিও নথি সংরক্ষণ করতে পারে।
বুড়জুম

1
সুতরাং .. আপনি কখনও নিবন্ধ লিখতে কাছাকাছি পেয়েছিলাম?
কনার গুর্নে

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

32

আমার সেরা বেট হ'ল তারা একটি গ্রাফ কাঠামো তৈরি করেছিল । নোডগুলি ব্যবহারকারী এবং "বন্ধুত্ব" প্রান্ত।

ব্যবহারকারীদের একটি সারণী রাখুন, অন্য সারণির টেবিল রাখুন। তারপরে আপনি প্রান্তগুলি সম্পর্কে ডেটা রাখতে পারেন, যেমন "দিন তারা বন্ধু হয়ে উঠল" এবং "অনুমোদিত অবস্থা," ইত্যাদি etc.


40
আমার অনুভূতি আছে যে আপনাকে এখানে কিছু লোকের জন্য ব্যাখ্যা করতে হবে।
TheTXI

4
আমি মনে করি আরও আকর্ষণীয় প্রশ্নটি হ'ল কীভাবে এ জাতীয় বিশাল কাঠামো (আমরা প্রায় 200 মিলিয়ন নোড এবং বিলিয়ন বিলিয়ন প্রান্তের কথা বলছি) যাতে এটি সহজে অনুসন্ধান এবং আপডেট করা যায় pers
ডার্ক ভোলমার

1
@ ডিভো: সূচি এবং পার্টিশনের চতুর ব্যবহার।
বেলগারিয়ানথেকিং

20

এটি সম্ভবত অনেকের সাথে অনেক সম্পর্কে:

ফ্রেন্ডলিস্ট (টেবিল)

user_id -> users.user_id
friend_id -> users.user_id
friendVisibilityLevel

সম্পাদনা

ব্যবহারকারীর টেবিলটিতে সম্ভবত পিকে হিসাবে ব্যবহারকারী-ইমেল নেই, সম্ভবত একটি অনন্য কী হিসাবে ।

ব্যবহারকারী (টেবিল)

user_id PK
user_email
password

4
যদিও এটি অবশ্যই সবচেয়ে বেশি অর্থবোধ করে, আমি মনে করি যে ফেসবুকের কতজন ব্যবহারকারী এবং প্রতিটি ফেসবুক ব্যবহারকারী কতজন বন্ধুবান্ধব রয়েছে তার পরিবেশনাই ভয়াবহ হবে।
কেভিন পাং

17

লিঙ্কডইন এবং ডিজিগ কীভাবে নির্মিত তা বর্ণনা করে এই নিবন্ধগুলিতে একবার দেখুন:

এছাড়াও "বিগ ডেটা: ফেসবুক ডেটা টিমের ভিউপয়েন্টস" রয়েছে যা সহায়ক হতে পারে:

http://developer.yahoo.net/blogs/theater/archives/2008/01/nextyahoonet_big_data_viewpoints_from_the_fac.html

এছাড়াও, এই নিবন্ধটি রয়েছে যা অ-সম্পর্কযুক্ত ডাটাবেসগুলি এবং কিছু সংস্থাগুলি কীভাবে সেগুলি ব্যবহার করে সে সম্পর্কে আলোচনা করে:

http://www.readwriteweb.com/archives/is_the_relational_database_doomed.php

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

প্রথম দুটি নিবন্ধে প্রচুর লিঙ্ক রয়েছে যা আপনাকে আরও কিছু অন্তর্দৃষ্টি দেওয়া উচিত।

আপডেট 10/20/2014

মুরত ডেমিরবাস একটি সংক্ষিপ্তসার লিখেছিলেন

  • টিওও: সামাজিক গ্রাফের জন্য ফেসবুকের বিতরণ করা ডেটা স্টোর (এটিসি 13)
  • F4: ফেসবুকের উষ্ণ BLOB স্টোরেজ সিস্টেম (OSDI'14)

http://muratbuffalo.blogspot.com/2014/10/facebooks-software-architecture.html

আছে HTH


9

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

সুতরাং প্রতিটি ব্যবহারকারীর নিজস্ব কী এবং বন্ধুদের একটি সারিতে বিশদ রয়েছে; ক্যাসান্দ্রা কীভাবে কাজ করে তা জানার জন্য:

http://prasath.posterous.com/cassandra-55


খুব আকর্ষণীয়, ধন্যবাদ আমার বন্ধু। তারা কখন স্কেল থেকে ক্যাসান্দ্রায় স্যুইচ করেছিল? তুমি কি জানো?
মেরিন

1
সচেতন থাকুন: পোস্টেরাস স্পেসস মারা গেছে ... তাই লিঙ্কটি।
টেকনিকুইস্ট

6

সাম্প্রতিক এই জুন 2013 পোস্টটি কিছু ডেটা ধরণের জন্য অ্যাসোসিয়েশনের সাথে সম্পর্কিত ডেটাবেসগুলি থেকে অবজেক্টগুলিতে রূপান্তর ব্যাখ্যা করার ক্ষেত্রে কিছু বিশদে যায়।

https://www.facebook.com/notes/facebook-engineering/tao-the-power-of-the-graph/10151525983993920

Https://www.usenix.org/conferences/atc13/tao-facebook's-disributes-data-store-social-راف- এ একটি দীর্ঘতর কাগজ পাওয়া যায়


5

আপনি বিদেশী চাবি খুঁজছেন। মূলত আপনার নিজের টেবিল না থাকলে ডাটাবেসে আরে থাকতে পারে না।


স্কিমার উদাহরণ:

    ব্যবহারকারীদের সারণী
        ইউজারআইডি পিকে
        অন্যান্য তথ্য
    বন্ধুদের টেবিল
        ইউজারআইডি - এফকে ব্যবহারকারীর টেবিলের কাছে এমন একজন ব্যক্তির প্রতিনিধিত্ব করে যা একটি বন্ধু রয়েছে।
        ফ্রেন্ডআইডি - এফকে টু ইউজার্স টেবিল বন্ধুর ইউজার আইডি উপস্থাপন করে

5
ডাউনভোটস কেন? কমপক্ষে কাউকে জানুন যে আপনি কেন এগুলিকে নিম্নচাপ দিয়েছেন।
সাশা চেদিগোভ

3
@ ফ্রেক: কেন? এই সাইটে ভোট দেওয়ার পুরো ধারণাটি বেনামে থাকার জন্য ভোটদানের জন্য। আপনি কেন মনে করেন যে ম্যালাফিস্ট কোনও কিছুর অধিকারী?
জিওচেট

4
বিশেষত যখন এটি একটি বৈধ উত্তর এবং অন্যান্য উত্তরগুলির সাথে প্রতিধ্বনিত হয় (যদিও আমি সেগুলি থেকে অনুলিপি করি নি, যখন আমি উত্তর দিয়েছিলাম, সেখানে কোনও উত্তর নেই)
মালফিস্ট

4
@ দ্য টিএক্সএআই: আমি মনে করি ডাউনভোটদের সম্পর্কে মন্তব্যগুলি সৌজন্যমূলক, বিশেষত এমন উত্তরের বিষয়ে যা স্পষ্টতই তাদের প্রাপ্য নয়, তবে আমি এই বিষয়েও সম্মত হই যে মন্তব্যগুলি আদেশের আদেশ করা উচিত নয়।
রবার্ট এস

2
অজ্ঞাত জবাবগুলিতে বেনামে নাম লেখায় এমন লোকেরা হ'ল যারা ভয় করেন যে তারা যদি ডাউন ডাউনকে ব্যাখ্যা করে কোনও মন্তব্য দেয় তবে তাদের অগভীর যুক্তি প্রকাশিত হবে।
বিনয়াক


1

মনে রাখবেন যে ডাটাবেস টেবিলগুলি উল্লম্বভাবে বৃদ্ধি করার জন্য ডিজাইন করা হয়েছে (আরও সারি), অনুভূমিকভাবে নয় (আরও কলাম)


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

1
হুঁ, ডাউনটা কেন? এবং এই এক উপরের মন্তব্যটি বোঝায় না।
নিল এন

2
না, মন্তব্যটি কোনও মানে করে না। দেখে মনে হচ্ছে কেউ মজাদার চেষ্টা করেছে, তাই আপত্তি করবেন না।
ডার্ক ভোলমার

0

অনেকগুলি টু-টেবিলের কর্মক্ষমতা সম্পর্কে, যদি আপনার কাছে 32 টি-বিট ইন্ট যুক্ত ব্যবহারকারী আইডি যুক্ত হয়, আপনার 200,000,000 ব্যবহারকারীদের জন্য প্রায় 200 বন্ধু গড়ে প্রায় 300GB গিগাবাইটের অধীনে আপনার প্রাথমিক ডাটা স্টোরেজ রয়েছে।

স্পষ্টতই, আপনার কিছু বিভাজন এবং সূচীকরণ প্রয়োজন হবে এবং আপনি এটি সমস্ত ব্যবহারকারীর জন্য স্মৃতিতে রাখবেন না।


0

সম্ভবত একটি টেবিল রয়েছে, যা বন্ধুর <-> ব্যবহারকারীর সম্পর্ক সংরক্ষণ করে, "ফ্রেন্ড_লিস্ট" বলুন, ক্ষেত্রগুলিতে 'ব্যবহারকারী_আইডি', 'ফ্রেন্ড_আইডি' রয়েছে।

যখনই কোনও ব্যবহারকারী অন্য ব্যবহারকারীকে বন্ধু হিসাবে যুক্ত করে, তখন দুটি নতুন সারি তৈরি হয়।

উদাহরণস্বরূপ, ধরুন আমার আইডি 'ডিপ 9 সি' এবং আমি 'আকাশ 3 বি' আইডি যুক্ত একজন ব্যবহারকারীকে আমার বন্ধু হিসাবে যুক্ত করি, তারপরে দুটি নতুন সারি মান ('ডিপ 9 সি', 'আকাশ 3 বি') এবং "'আকাশ3 বি" সহ টেবিলে "ফ্রেন্ড_লিস্ট" তৈরি করা হবে ',' deep9c ')।

এখন কোনও নির্দিষ্ট ব্যবহারকারীর কাছে বন্ধু-তালিকা দেখানোর সময়, একটি সাধারণ স্ক্যাকল তা করবে: "ফ্রেন্ড_লিস্ট থেকে ফ্রেন্ড_আইড নির্বাচন করুন যেখানে ব্যবহারকারী_id =" লগ-ইন করা ব্যবহারকারীর আইডি যেখানে (সেশন-অ্যাট্রিবিউট হিসাবে সঞ্চিত) থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.