ساختار بهینه جدول (دنبال کنندگان و دنبال شوندگان) با استفاده از Polymorphism

با درود خدمت شما. در یکی از پروژه هایی که در دست دارم که یک شبکه اجتماعی می باشد. بخشی رو به عنوان فالور و فالواینگ مثل اینستاگرام یا دیگر شبکه های اجتماعی داریم که در ساختار اون در دیتابیس و همینطور فراخوانی اون دچار مشکل شدم.

نکته: من از چیز زیادی نمی دونم فقط با مشورت هایی که گرفتم فکر می کنم باید استفاده کنم و وارد مبحث بیسیک بشم و یادش بگیریم: ولی یک مطلب در Functional Programming - Polymorphism خوندم.



جدولی که من در ذهنم درست کردم و اشتباه می باشد به شرح زیر می باشد.
25%20pm

در این جدول یک type داریم که اگر یک باشد یعنی فالور و اگر دو باشد یعنی فالواینگ که در این بخش من از یک کتابخانه در الکسیر کمک گرفتم تا تمیز تر بنویسیمش

در فیلد دوم ما owenr_id داریم که در حقیقت user_id صاحب اکانت است و سومین فیلد که من اسمی براش پیدا نکردم کسی که ما فالوش کردیم یا فالور ما هست user_id اون در این جدول قرار می گیره.

تا اینجا چیزی بود که من خودم فکر کردم که به احتمال خیلی زیاد اشتباه است. حال سوالات برای بنده پیش می یاد:

  • ساختار مناسبی که در شبکه های اجتماعی بزرگ استفاده می کنند چی هست؟
  • زمانی که همان کاربری که فالو ار ما باشد جزو فالو اینگ ما باشد چطور می شود؟
  • وقتی رکورد های زیاد شوند محدود کردن به یکowner_id کفایت می کند مثلا بگردید در ۱۰ ملیون رکورد بر اساس صاحب اکان فالور و فالواینگش را بیاورد که از دست سرنوشت شناسه مذکور از فیلد ۹۰۵۰ شروع می شود. و ما تازه می خواهیم where بزاریم بر اساس owener_id
  • نحوه فراخوانی بر اساس type به چه صورت می باشد؟
  • آیا ذخیره کاربر فالو شده یا فالور باید در همین جدول باشد یا خیر؟

پست هایی در استک اورفلو دیدم خیلی بچگانه بود در حد مثلا ۲۰ تا دونه کاربر داشته باشی فقط کارو جلو ببری یا شاید من خیلی خوب نتونستم سرچ بکنم.

با تشکر

این پست ببنین

در سیستم های اجتماعی بزرگ database های مخصوص برای اینکار استفاده میکنند Graph database هستند
یا برای داده های بزرگ ساخته شدند Hbase, …

2 پسندیده

درود سام عزیز اینجا برای نرمالایز کردن جدول پیشنهاد داده دو جدول درست بشه جدا از هم آیا اصلا این کار از نظر شما درست است ؟

RDBMS برای این کار در scale بالا محدودیت هایی داره. اما اگه RDBMS کار میکنی normalization همیشه کار اول و درستی به حساب میاد

یک روش دیگه

2 پسندیده

یکمی نظرم به جداکردن جداول نزدیک تر شده. هم حجم نصف می شه هم استقلال داده فکر کنم بیشتر بشه یعنی نیاز به تایپ نداره و همینطور می شه در آینده زیاد شد می شه بر اساس هر سال داده هارو تقسیم بندی کرد به قول یکی از دوستان روی یک سرور نگهداشت!!

حالا یک سوال polymorphism اینجا چه نقشی داره که من هنوز نتونستم تو کار درکش کنم ؟

polymorphism در database design معنی اینو داره که یک جدول با توجه به key نقش مختلفی داره
یک بار key به جدول user نقش follower داره یک بار دیگه نقش followed

2 پسندیده