ساختار دیتابیس برای وبسایتی که چندین کاربر دارد

سوال

دارم یه وبسایت با asp net core میزنم اما توی پیاده سازی ساختار دیتابیسش سوال دارم
وبسایتی رو فرض کنید که هر کاربر بتونه پست هایی بزاره، مانند اینستا. حالا ما دوتا table داریم یکی User یکی هم post
و این دوتا table با userid و postid در ارتباط هستن. و هروقت کاربر بخواد پست هاش رو ببینه باید اون post هایی که userid شون با userid کاربری که لاگین هست یکی باشه رو لود میکنیم

سوال اینجاست

که باید هربار که کاربر خواست پست هاش لود شه از بین تمام پست ها اون پست هایی که باید رو سرچ کنیم؟ یعنی مثلا خود اینستا همین کار رو میکنه؟ که مثلا ۱۰ تا پست کاربر رو از بین اون همه میلیون میلیون پست های دیگش سرچ کنه و بیاره؟ ایا این شیوه باعث پایین اومدن performance نمیشه؟ شیوه بهتری وجود داره یا فقط همینه؟

در حال بررسی 0
Mahyar 1 سال 0 پاسخ ها 118 دیده شده 1

پاسخ ها ( نه )

  1. سلام به شما
    بله قطعا برای اینکه کاربر بتونه پست های مربوط به خودش رو ببینه در ابتدا باید به جدول پست ها متصل شد و سپس با اعمال فیلتر(post.UserId == Id) پست های مورد نظر رو از بانک واکشی کرد حالا یکی از روش های پیاده سازی این کار استفاده از دستورات Linq هست اما نکته ایی که در مورد performance برنامه بسیار مهم هست اینه که شما باید بر روی دیتایی از نوع IQueryable فیلتر رو اعمال کنید نه دیتایی از نوع List، تفاوت IQueryable و List در این است که اگر دیتای شما از نوع IQueryable باشد یعنی اینکه شما فقط به دیتای جدول پست در بانک دسترسی پیدا کرده اید و هیچ واکشی اتفاق نیفتاده است اما اگر دیتای شما از نوع List باشد یعنی اینکه شما تمامی پست های بانک رو واکشی کرده اید نکته قابل توجه اینه که در حالت اول واکشی دیتا بعد از اعمال فیلتر اتفاق می افتد ولی در حالت دوم واکشی دیتا از بانک قبل از اعمال فیلتر اتفاق می افتد پس حتما حتما شما باید به روش اول عمل کنید در غیر اینصورت به طور بسیار بدی کارایی و سرعت وب سایتتون پایین میاد.
    برای مثال یک کاربر که کلا ۱۰ تا پست داره:
    حالت اول: شما به جدول پست در بانک دسترسی پیدا می کنید(IQueryable) و بعد فیلتر میزنید و بعد ۱۰ تا پست رو واکشی می کنید و به سرور میارید.
    حالت دوم: شما به جدول پست وصل میشید و تمامی دیتای موجود(مثلا یک میلیون پست) رو واکشی می کنید(List) و به سمت سرور میارید و حالا تازه روش فیلتر اعمال می کنید.
    توضیح این قضیه روی خود سورس خیلی آسون تره من تمام تلاشم رو کردم که به طور ساده بیان کنم امیدوارم براتون مفید واقع شه.
    شاد و پرانرژی باشید.

ارسال یک پاسخ