تمرین کار با دیتابیس گرافی
meahmadi opened this issue · comments
@kharazi @s1na @afshinrodgar @aryanbaghi لطفا در قدم اول و برای آشنایی بیشتر با دیتابیس های گرافی مساله زیر را با کمک یک دیتابیس گرافی مانند نئو4جی انجام دهید.
سعی کنید برای حل مساله به فرآیند های ذهنیتان توجه کنید
مساله:
در فایل ورودی یک سری اتفاق در هر خط نوشته شده است. شروع خط با یک تاریخ یا تفاوت تاریخ مشخص میشود. یک برنامه بنویسید که این فایل را بخواند و آن را در یک مدل گرافی ثبت کند. برای مثال نمونه زیر بخشی از یک فایل ورودی است:
1393-01-01 12:01:04 this is the first day of new year
+ 0-0-0 1:: we are still speaking about the new year
- 0-0-0 0:15: something strange has happend
1392-12-15 16:: i was driving to my home
- 0-0-0 0:1: i was at university
+ 0-0-0 0:1: i was thinking about my holiday plan at new year
در مثال بالا ابتدای هر خط با 3 عدد که نشان دهنده تاریخ هستند و 3 عدد که نشان دهنده زمان هستد شروع میشود. اگر ابتدای خط با علامت + یا - شروع شود یعنی این زمان نسبت به زمان قبل نسبی است. وقتی به جای یک عدد هیچ چیز نمیاید یعنی دقت زمان مطرح شده در اون اندازه نیست. مثلا در خط دوم منظور یکدقیقه بعد است و نه یک دقیقه و صفر ثانیه بعد.
مدل را به نحوی طراحی کنید که پاسخ به سوالات زیر در آن راحت باشد
1- میخواهیم بعدا بتوانیم به راحتی در زمانهای مختلف حرکت کنیم. مثلا بگوییم روز اول سال 93 و اتفاقات مختلف آن بیایند
2- بتوانیم بین رخدادهای به هم مرتبط حرکت کنیم. ممکن است چند ماجرا در همان یک ساعت وجود داشته باشد که اتفاقات زیادی هم در آنها مطرح باشد اما سیر هر ماجرا به خودش مربوط است و با هم قاطی نمیشوند.
3- اتفاقات اصلی و فرعی دارند
برای حل این مساله قرار نیست هر کسی خودش همه مساله را حل کند. لطفا همین جا طراحی ابتدایی و ... را مطرح کنید . قرار نیست کد بزنیم بلکه در نهایت میخواهیم گراف های نمونه حل مساله را بکشیم.
حاصل صحبت من و @afshinrodgar
راه اولیه که به ذهن میرسه اینه که اتفاقات هر کدوم یک گره باشن و با یال باهم ارتباط باشن، روی یال ها زمان های نسبی اتفاقاتی که با اتفاق این گره در یک سیر قرار دارند نگه داری میشه.(اینجوری میشه تو زمان تو سیر عقب جلو رفت)
درواقع مدلی که داریم از زمان نگاه می کنیم اینجوریه:
خوبی:
- راحت میشه تو زمان زمان حرکت کرد.
- سیر ها جدا هستن
بدی:
- از خاصیت گراف استفاده ای نشده
ابهام:
- هنوز منظور از اتفاق های اصلی و فرعی رو نفهمیدیم: ۱. توی یک سیر اتفاقات اصلی و فرعین ۲. یا توی ی زمان خاص دوتا اتفاق هم زمان با هم اصلی و فرعی دارن ۳. یا چیز دیگه؟
ممنون
میشه محبت کنید و با استفاده از ابزارهای گراف کش مانند دیا مدلتون رو ترسیم کنید. مثلا شبیه به چیزی که در
https://github.com/meahmadi/nsun/wiki/History-Graph-Model
وجود دارد بعد من توضیحاتی میدم
در ضمن: راهی بلدید که این نوشته هایمان راست به چپ باشد؟
به نظر من رسید اگر ما هر نود رو زمان بذاریم و اتفاقات رو روی یال قرار بدیم میتونه جالب باشه
یکی از خوبی هاش اینه که زمان رو تقریبا گسسته کردیم برای خودمون و زمان های مهم رو به صورت نود داریم و به سادگی می تونیم بررسی کنیم. و هم سیر اتفاقات رو داریم هم هز زمان فقط و فقط با یک نود نشون داده میشه نه با چند یال.
اما مشکلاتی هم داره که کلا پیاده سازیش رو میبره زیر سوال.
نظرتون چیه راجع به این؟
@aryanbaghi
ابهام 😕
- قراره یالی که نگهدارندهی هر اتفاق میتونه باشه رابطهی بین زمانها رو چجوری مشخص کنه؟ در واقع متوجه نشدم این گرهی دومی که قراره با گرهی اتفاق ما رابطهی زمانی داشته باشه چیه؟
سوال ❓
- رخدادهای مرتبط چجوری تو این مدل نمایش داده میشن؟ یا جواب این مدل برای سوال دو چیه؟
@afshinrodgar
سوالی جالبی بود، در راستای جواب دادنش چیزی به ذهنم رسید که هم جواب شما است هم یکم از ابهاماتی که برا خودم بود رو حل کرد
ببین فرض کن درساعت ۱ رویداد الف روخ داده و در ساعت ۲ رویداد ب و در ساعت ۶ رویداد ج که به الف و ب مربوطه اون موقع ما از نود ساعت ۱ و نود ساعت ۲ با یال های مربوط به رویداد الف و ب به نود ساعت ۶ میریم و از نود ۶ با یال ج به خودش
البته این مدل هنوز مشکل داره
مشکلی که فعلا به ذهنم رسیده اینه که اگه یه سری اتفاق بی ربط به ج ولی مرتبط به یک رویداد دیگه وارد نود ۶ شده بود چطور باید تشخیص بدیم به رویداد ج بی ربطه؟
لازم به ذکر که توی شکل یال رویداد الف هم جهت داره یادم رفته بکشم!!!
Hello Vahid,
I Wan't write text Right To Left(RTL) on github Issues, how i can do this work?
I use from an RTL languge (Persian) and I wan't to write rtl;
Thanks for getting in touch! We don't currently support RTL Markdown, but I have seen some request for this so we can go ahead and add your +1 to our feature request list for the team to consider.
Thanks,
Robert
یک مدل خیلی ساده این میتونه باشه که زمان رو به حالت درختی در بیاریم تا بتونیم به تفکیک به هر روز دسترسی داشته باشیم. هر اتفاق به همراه زمانش در یک گره متصل به روز مربوطه ذخیره میشه. حالا اگر توالی اتفاقها خیلی مهم باشه میشه به صورت زنجیروار اونها رو نگه داشت.
ارتباط اتفاقها به هم به نظرم باید توسط المانهای هر اتفاق برقرار بشه.
@aryanbaghi با چی کشیدی اینقد خوب درومد؟:دی