PDA

View Full Version : راه صحیح ذخیره فایلهای ارسالی و ثبت آنها در دیتابیس چیست؟



white fox
پنج شنبه 31 فروردین 1385, 10:04 صبح
با سلام...
دوستان من تا بحال تجربه ساخت سایت بزرگی رو نداشتم برای همین این سوال به ذهنم خطور کرد..
مثلا همین سایت برنامه نویس روزانه ممکن است تا 20 برنامه یا عکس به صورت الحاقی از طریق پست ها وارد سایت بشه ...حالا فرض رو بر این میزاریم که فایلها و عکسها در دیتابیس ذخیره نمیشوند و روی سرور روی هارد
اولا رابطه هر عکس یا فایل با پست مربوطه چگونه مشخص میشود؟ منظورم این هست که خوب بالاخره جزو فیلدهای یک سطر دیتابیس که در واقع یک پست هست یک ستون هم برای آدرس فایل ذخیره شده در دیتابیس
آیا بدین صورت است یا راه بهتری هم وجود دارد( در مورد دادن آدرس صحیح آیا باید آدرس به صورت Relative از مسیر ریشه باشد یا فقط نام فایل ذخیره شود و مسیر در فایل برنامه داده بشه؟) ....دومین مطلب اینکه این فایلها آیا در یک دایرکتوری ذخیره بشوند یا برای هر قسمت به صورت جدا گانه و با ذیر شاخه های متعدد؟
یک سوالی که به ذهن من رسید در رابطه با این موضوع چون ثبت اطلاعات در دیتابیس و ثبت فایل در هارد دو عمل جدا از هم هستند... بهتر است اول اطلاعات ثبت شود که در صورت ایجاد خطا اطلاعات برگشت داده شود و فایل هم در هارد ذخیره نشود یا بلعکس اول عکس ذخیره شود بعد اطلاعات در دیتابیس ذخیره شود.
آیا تعداد آیتمهای موجود در یک دایرکتوری همینطوری زیاد بشه تاثیری بر سرعت برنامه دارد؟ یا بهتر است مثلا امکان دادن مسیر به مدیر سایت داده شود؟
کلا تجربتون در این ضمینه به چه صورتی بوده ممنون میشم از راهنمایی پیشاپیش شما.

saniak_robot
پنج شنبه 31 فروردین 1385, 12:15 عصر
بهتره که فایل رو تو سرور بذاری و نام فایل رو تو بانک و فراخونیش کنی .
برای دسته بندی هم می تونی تو پوشه های مختلف بذاری این بسته به سلیقه خودته .
تعداد آیتمهای تو دایرکتوری اگه زیاد بشه تاثیرش تو سرعت زمانیه که تو صفحه لود میشن . اگه تو صفحه هر چه قدر عکس بیشتری بذاری سرعت پایین تره . البته راههایی وجود داره که می تونی عکس ها رو تو صفحه یکی یکی پشت سر هم لود کنی که با جاوا اسکریپته .

برای ثبت هم اول فایل رو ثبت کن چون احتمال وجود خطا بیشتره بعد اطلاعات و در صورتی که فایل به درستی ثبت شد تو بانک ثبت کن .



موفق باشید .

Behrouz_Rad
پنج شنبه 31 فروردین 1385, 13:02 عصر
حالا فرض رو بر این میزاریم که فایلها و عکسها در دیتابیس ذخیره نمیشوند و روی سرور روی هارد

فرض نیست، واقعیته!



رابطه هر عکس یا فایل با پست مربوطه چگونه مشخص میشود؟ منظورم این هست که خوب بالاخره جزو فیلدهای یک سطر دیتابیس که در واقع یک پست هست یک ستون هم برای آدرس فایل ذخیره شده در دیتابیس
آیا بدین صورت است یا راه بهتری هم وجود دارد

دقیقا همینطوره!



در مورد دادن آدرس صحیح آیا باید آدرس به صورت Relative از مسیر ریشه باشد یا فقط نام فایل ذخیره شود و مسیر در فایل برنامه داده بشه؟

ذخیره ی نام فایل کفایت می کنه!



این فایلها آیا در یک دایرکتوری ذخیره بشوند یا برای هر قسمت به صورت جدا گانه و با ذیر شاخه های متعدد؟

در یک دایرکتوری! جهت جلوگیری از تداخل نام فایل ها، نام اونها ابتدا تغییر می کنه و سپس بر روی هارد ذخیره میشه.
در هنگام بازیابی، مجددا نام اصلی فایل با تغییر نام اون، به فایل برگشت داده میشه.



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

بستگی داره!
باید دید در عملی که قصد انجامش رو داری، تقدم مدیا بیشتر است یا متن!
با توجه به تقدم، اقدام به ذخیره ی اونها کن.
به عنوان مثال، در هنگام ارسال یک پست، معمولا متن همراه یا پست ارزش بیشتری دارد تا عکس های موجود در آن.
به همان خاطر، ابتدا متن ذخیره می شود و سپس عکس.
البته ممکنه باب میلت باشه که در صورتی که عکس به هر دلیلی نتونست ذخیره بشه، متن رو هم ذخیره نکنی!
تمامی اینها به کار و میل برنامه نویس بر میگرده.



آیا تعداد آیتمهای موجود در یک دایرکتوری همینطوری زیاد بشه تاثیری بر سرعت برنامه دارد؟ یا بهتر است مثلا امکان دادن مسیر به مدیر سایت داده شود؟

خیر! هیچ تاثیری نداره...

پ.ن: به عنوان مثال، در این سایت، آواتور کاربران با پاس دادن شماره ی کاربری آنان به صفحه ی image.php، به صورت Stream بر روی صفحه نمایش داده می شود.

موفق باشید.

nazaninam
پنج شنبه 31 فروردین 1385, 14:48 عصر
آقای راد بهترین راه برای تغییر نام فایل ها چیه؟
1-از یک الگوریتم رندوم استفاده کنیم ؟
2- از تاریخ و ساعت اون لحظه استفاده کنیم
در بخش 1 هر دفعه باید چک کنیم ببینیم نام رندوم جدید تو بانک هست یا نیست که جالب نیست
توی دومی هم اگه proccess یکم طولانی باشه ممکنه بین نامی که در دیتابیس قرار میگیره و نامی که تو هاست ذخیره میشه اختلاف ثانیه ای رخ بده
چه راهی پیشنهاد شماست؟؟

Behrouz_Rad
پنج شنبه 31 فروردین 1385, 15:00 عصر
a Way is:
GUID Class

Good Luck

white fox
پنج شنبه 31 فروردین 1385, 16:01 عصر
با سلام و تشکر از جواب تمام دوستان...
به عنوان نتیجه گیری پس به اعتقاد شما آقای راد بهتره با استفاده از کلاس GUID نامی به فایل داده بشه و در هارد ذخیره بشه و این نام جدید به همراه نام اصلی فایل در دیتابیس ذخیره بشه؟ درسته؟
و کل فایلها در هر دسته البته در یک دایرکتوری باشند و فقط نام ثبت بشه و مسیر در پروژه داده بشه.

و مورد دیگه اینکه در مورد تذکر دوستمون که گفتن با استفاده از جاوا اسکریپت عکس هارو یکی یکی در صفحه لود کنیم میخواستم بدونم آیا کدی نمونه ای دارند یا آدرسی که بتونه کمکم کنه چون من در صفحات عکس زیادی دارم....


در این ضمینه برخی سایتها رو دیدم که موقع لود شدن ابتدا مطالب لود میشوند و سپس عکس ها خوب اینطوری بهتر هست چون صفحه من سنگین هست نمیخوام کاربر خیلی منتظر بمونه حداقلش ببینه که متون لود شدن حالا عکسها یکی یکی لود میشوند...
در مورد این هم اگر توضیحی بدید ممنون میشم...(گرچه پرسش تو پرسش شد بر خلاف قوانین انجمن!!)

AspNet
پنج شنبه 31 فروردین 1385, 17:48 عصر
حالا واسه چی باید با 2 تا نام ذخیره بشه؟
من این قسمت رو متوجه نشدم:
در یک دایرکتوری! جهت جلوگیری از تداخل نام فایل ها، نام اونها ابتدا تغییر می کنه و سپس بر روی هارد ذخیره میشه.
در هنگام بازیابی، مجددا نام اصلی فایل با تغییر نام اون، به فایل برگشت داده میشه.

Behrouz_Rad
پنج شنبه 31 فروردین 1385, 18:15 عصر
حالا واسه چی باید با 2 تا نام ذخیره بشه؟
من این قسمت رو متوجه نشدم:
در یک دایرکتوری! جهت جلوگیری از تداخل نام فایل ها، نام اونها ابتدا تغییر می کنه و سپس بر روی هارد ذخیره میشه.
در هنگام بازیابی، مجددا نام اصلی فایل با تغییر نام اون، به فایل برگشت داده میشه.
با دقت بخون! حتما متوجه میشی...:چشمک:

Behrouz_Rad
پنج شنبه 31 فروردین 1385, 18:36 عصر
راه دیگری که وجود داره (و سیستم vBulletin هم از اون استفاده می کنه)، ذخیره ی اطلاعات فایل ها در دیتابیس است.
جدول نگهدارنده ی اطلاعات فایل ها، یک فیلد AutoNumber خواهد داشت که یک شماره ی یکتا به فایل اختصاص و نام واقعی آن را نیز ذخیره می کند.
در این حالت، نام موقت فایل، شماره ی یکتای آن خواهد بود.
اطلاعات دیگری که ذخیره می شوند شامل: حجم، تاریخ آپلود، تعداد داونلود، نوع فایل و .... هستند.

موفق باشید.

white fox
جمعه 01 اردیبهشت 1385, 07:27 صبح
باز هم ممنون آقای راد...
در مورد همون راه اول که نام فایل رو تغییر بدیم خوب موقع ارسال که من متدی ندیدم که همزمان نام فایل هم عوض کنه و طریقه Rename کردن فایل هم تا اونجایی که من میدونم باید فایل رو با متد file.move به همون مسیری که فایل قرار دارد انتقال داد با یه نام جدید که این مستلزم این هست فایل ارسال بشه بعد اینکار انجام بگیره...درسته؟ یا میشه قبل از ارسال نام فایل رو عوض کرد؟

Behrouz_Rad
یک شنبه 03 اردیبهشت 1385, 21:07 عصر
نام فایل آپلود شده رو در یک متغیر ذخیره کن و سپس نام اون رو تغییر بده.

موفق باشی.