PDA

View Full Version : نرم افزار بایگانی پرونده - مشورت با شما



ashkan209
یک شنبه 03 مرداد 1389, 22:01 عصر
دوستان سلام
تصمیم داریم پروژه ای را طراحی ، برنامه نویسی و پشتیبانی کنیم
مختصات این پروژه به شرح زیر می باشد
1- مقرر است با VB.net و Framework 3.5 و SQL server 2008 طراحی و پیاده سازی شود
2- وظیفه نرم افزار اسکن از پرونده های یک اداره بزرگ و ذخیره سازی اوراق پرونده ها می باشد - فرض کنید تعداد پرونده حدود 50000 و هرکدام حدود 50 برگ - تعداد پرونده ها به روز اضافه می شود
3- این نرم افزار بر روری شبکه ران شده و سرویس میدهد
4- در ماههای اولیه ممکن است حد اقل 10 نفر همزمان اقدام به اسکن و DataEntry می کنند و پس از مکانیزه شدن بایگانیهای موجود ،نرم افزار پرونده های روزانه را اسکن می کند
5- قرار است همزمان با ورود تصاویر اسکن شده و خصوصا پس از اتمام آن از این تصاویر بایگانی شده توسط کاربران شبکه استفاده شود . یعنی با دادن مثلا شماره پرونده ، تصاویر اوراق آنرا ببینند . تعداد کاربرانی که بعدا بصورت روزانه ممکن است از این اطلاعات استفاده کنند حداقل 50 نفر و بر روی شبکه lan می باشد
6- بر روی سرورهای شبکه Lan مورد نظر ، برنامه های دیگری هم روزانه در حال فعالیت به حداقل 100 کارمند می باشد
-------------------
حال مهمترین سوال بنده از اونهایی که اینچنین تجربه هایی را پیاده سازی کرده اند این است که :
- با توجه به حجم اوراق پرونده که باید ذخیره سازی شوند و سرویسی که می بایست این برنامه به تعداد زیادی کاربر بدهد ، آیا تصاویر را در دیتابیس ذخیره کنم یا در هارد و آدرس آنرا در دیتابیس نگهداری کنم ، و چرا ؟
- در نظر داشته باشید اگه در دیتابیس ذخیره کنم ، و با توجه به زمان فراخوانی تصاویر از این دیتابیس و همزمان توسط تعداد زیادی کارمند، وضعیت سرعت پاسخگوئی چگونه خواهد بود ؟
- اگر در هارد سرور ذخیره کنم آپلود و دانلود همزمان توسط کاربران زیاد باعث میگردد شبکه به حالت هنگ و یا نیمه هنگ برود ؟
پیشنهاد شما چیست ، مشتاقم از نظرات فنی و کارشناسی دوستان در مورد این فرضیات و حواشی آن استفاده کنم
سپاس

nasim bahari
یک شنبه 03 مرداد 1389, 22:36 عصر
سلام.........

بستگی به شرایط کاری شبکه داره .

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

البته، شما با آوردن یک عکس یا صفحه برای نمایش باید در پس زمینه چند عکس قبل و چند عکس بعد رو هم Down کنید زیرا به احتمال زیاد کاربر در اقدام بعدی به صفحه قبل یا بعد می رود و چون این صفحه قبلاً آورده شده سرعت شما بالا می رود.

موفق باشید.......باز هم در خدمتیم.

ali_najari
دوشنبه 04 مرداد 1389, 00:30 صبح
چطوری باید یه جدول ایندکس ساخت و توی اون سرچ کرد و بعد عکس ها رو لود کرد؟

nasim bahari
دوشنبه 04 مرداد 1389, 00:43 صبح
سلام........علی جان

توی مثالی که در بالا زدم، چند تا از اصول پایگاه داده آورده شده که به همراه یک سری اصول دیگه در برنامه نویسی پایگاه داده لازم هستش.......

اگر شما نسبت به اونها آگاهی نداری باید حتماً قبل از کد نویسی، کتاب های مربوط به پایگاه داده رو مطالعه کنی .........

راستش توضیح اونها از حوصله یک یا چند تاپیک خارج وگرنه این کار رو می کردم.......

موفق باشید.........

ali_najari
دوشنبه 04 مرداد 1389, 10:08 صبح
نسيم جان شما منظورت اينه كه من كتاب SQL رو بخونم توش هست ؟

راستش منم از ايندكس براي يك يا چند فيلد استفاده ميكنم ولي تا به حال جدول ايندكس نشنيده بودم واسه همين واسم جالب بود و ميخوام ازش استفاده كنم براي اينكه سرعت خواندن اطلاعاتم رو بالا ببرم

ali_najari
دوشنبه 04 مرداد 1389, 10:12 صبح
راستي اگه نخوام عكس ها رو توي ديتابس ذخيره كنم و فقط آدرس ها رو توي اون ذخيره كنم چطوري ميتونم عكس ها رو لود كنم اگه چند صفحه مختلف وجود داشته باشه ؟
علاوه بر اين سوال سوال ديگري كه داشتم اينه كه چطوري ميتونم عكس ها توي يه فلدر در كنار ديتابيس در شبكه كپي كنم ؟
اين يه سوالي هست كه هنوز نتونستم جوابي واسش پيدا كنم
خيلي وقته دنبالشم ولي چون پيدا نكردم عكس ها رو توي خود ديتابيس ذخيره كردم.

ashkan209
دوشنبه 04 مرداد 1389, 11:53 صبح
دوستان دیگه اگه ممکنه نظر بدن
ممنون میشم

nasim bahari
دوشنبه 04 مرداد 1389, 16:31 عصر
نسيم جان شما منظورت اينه كه من كتاب SQL رو بخونم توش هست ؟

راستش منم از ايندكس براي يك يا چند فيلد استفاده ميكنم ولي تا به حال جدول ايندكس نشنيده بودم واسه همين واسم جالب بود و ميخوام ازش استفاده كنم براي اينكه سرعت خواندن اطلاعاتم رو بالا ببرم

سلام....

منظور من از کتاب پایگاه داده ، کتاب دستورات SQL و یا کتاب آموزشی نرم افزار SQL نیست ، منظورم کتابی است که صرفاً به مبحث پایگاه داده خارج از هر محیطی پرداخته و برای این کار شما می تونین کتاب هایی که به دانشجویان پایگاه داده تدریس میشه استفاده کنین....

یه سوال : اگر شما به دنبال عدد 1200 که بیانگر جایگاهی است که پرونده شماره مثلاً 12 هستش توی یک جدول که فقط دارای یک ستون از اعداد هست بگردین راحترین یا اینکه مثلاً دنبال یه رشته در یک جدول چند ستونی ؟

مطمئناً راه حل اول بهتر است. زیرا شما اگر جدول شما دارای 800000 رکورد باشد. شما رکورد وسطی رو می خونین یعنی رکورد شماره 400000 رو می خونین حالا مقایسه می کنین ، میبینین که 1200 از 400000 کوچکتر است، پس نتیجه می گیرین که رکورد مورد نظر شما مابین 400000 تای بالایی نیست و همین طور تا آخر ادامه می دین.....

حال اگر از همان روش سنتی استفاده کنین باید رکورد 1200 را در بدترین حالت با 800000 رکورد دیگر مقایسه کنید اما در روش دوم (جستجوی دودویی) حداکثر و در بدترین حالت 22 بار این کار رو می کنین.......

موفق باشید........

nasim bahari
دوشنبه 04 مرداد 1389, 16:39 عصر
راستي اگه نخوام عكس ها رو توي ديتابس ذخيره كنم و فقط آدرس ها رو توي اون ذخيره كنم چطوري ميتونم عكس ها رو لود كنم اگه چند صفحه مختلف وجود داشته باشه ؟
علاوه بر اين سوال سوال ديگري كه داشتم اينه كه چطوري ميتونم عكس ها توي يه فلدر در كنار ديتابيس در شبكه كپي كنم ؟
اين يه سوالي هست كه هنوز نتونستم جوابي واسش پيدا كنم
خيلي وقته دنبالشم ولي چون پيدا نكردم عكس ها رو توي خود ديتابيس ذخيره كردم.

سلام........

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



PicBox.LoadPicture=label1.text


منظورم از Lable1 همان لیبلی است که آدرس عکس به اون پیوند داده شده است.

خب شما این کار رو برای عکس اصلی انجام میدین . حالا بسته به اینکه شما چگونه عکس ها ذخیره می کنین. 5 تا PicBox برای عکس های قبلی و 5 تا برای عکس های بعدی بزارین....

موفق باشید....

ali_najari
دوشنبه 04 مرداد 1389, 21:21 عصر
توی گذارشم چطوری این عکس ها رو لود کنم ؟
مشکل من با گزارش گیری با کریستال ریپرت هستش

sari-1369
سه شنبه 05 مرداد 1389, 00:09 صبح
سلام........

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



PicBox.LoadPicture=label1.text
منظورم از Lable1 همان لیبلی است که آدرس عکس به اون پیوند داده شده است.

خب شما این کار رو برای عکس اصلی انجام میدین . حالا بسته به اینکه شما چگونه عکس ها ذخیره می کنین. 5 تا PicBox برای عکس های قبلی و 5 تا برای عکس های بعدی بزارین....

موفق باشید....




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

hooooman
سه شنبه 05 مرداد 1389, 01:51 صبح
سلام
بنظر من بايد ذخيره عکس غير ديتابيس رو کلا فراموش کنين
با اين حجم بالاي اطلاعات که شما ميفرمايين چندتا Folder و SubFolder ميخاين روي سرور ايجاد کنين؟!!!!!
جچوري ميخاين ائنهمه تصوير رو اسم گذاري کنين؟!!!!!! جچوري ميخاين به کاربرتون امکان پيدا کردن 1 فايا ميون اونهمه فايل رو بدين؟!!!!!!!
اصلا بنظ خودتون ذخيره اينهمه فايل منطقي هستش؟!!!!!
Share کردن اينهمه Folder منطقي هستش؟!!!!
هزارتا مشکل پيدا ميکني دوست عزيز
Sql فيلد Image رو براي همين ايجاد کرده
شما ميتونين فرمت تصاويرتونو جوري قرار بدين که حجم کمتري داشته باشن
بجاي 1 PictureBox تمامد صفخه (FullScreen) از نصف صفحه براي نمايش تصويرهاتون استفاده کنين که همه اينکارا بستگي مستقيم به نحوه طراحي تون داره ...
ولي من دادن دسترسي به همه کاربرا به به فولدر هاي اشتراک گذاري شده روي سرور رو کار خطرناکي ميدونم ضمن اينکه با توجه به اينکه ممکنه بعضي از نامه محرمانه و طبقه بندي شده باشن محدود کردن کاربرا خودش ميشه 1 مکافات
همينطور مسئله پشتيبان گرفتن از عکسها
فردا اگه سرور crash کنه بايد جوابشونو بدي
و در آخر اينکه کاربر شما با توجه به نوع کارش و حجم بالاي اطلاعات بايد پي کمي کندي سرعتو به تنش بماله

nasim bahari
سه شنبه 05 مرداد 1389, 06:44 صبح
این در صورتی جواب میده که فایل روی سیستم همون طرف موجود باشه . ولی اینطور که من متوجه شدم برنامه تحت شبکه هستش .

سلام Sari-1369

این تاپیک در پاسخ به سوال ali-najari بود نه Ashkan209 .

موفق باشید.

ashkan209
سه شنبه 05 مرداد 1389, 11:19 صبح
سلام
بنظر من بايد ذخيره عکس غير ديتابيس رو کلا فراموش کنين
با اين حجم بالاي اطلاعات که شما ميفرمايين چندتا Folder و SubFolder ميخاين روي سرور ايجاد کنين؟!!!!!
جچوري ميخاين ائنهمه تصوير رو اسم گذاري کنين؟!!!!!! جچوري ميخاين به کاربرتون امکان پيدا کردن 1 فايا ميون اونهمه فايل رو بدين؟!!!!!!!
اصلا بنظ خودتون ذخيره اينهمه فايل منطقي هستش؟!!!!!
Share کردن اينهمه Folder منطقي هستش؟!!!!
هزارتا مشکل پيدا ميکني دوست عزيز
Sql فيلد Image رو براي همين ايجاد کرده
شما ميتونين فرمت تصاويرتونو جوري قرار بدين که حجم کمتري داشته باشن
بجاي 1 PictureBox تمامد صفخه (FullScreen) از نصف صفحه براي نمايش تصويرهاتون استفاده کنين که همه اينکارا بستگي مستقيم به نحوه طراحي تون داره ...
ولي من دادن دسترسي به همه کاربرا به به فولدر هاي اشتراک گذاري شده روي سرور رو کار خطرناکي ميدونم ضمن اينکه با توجه به اينکه ممکنه بعضي از نامه محرمانه و طبقه بندي شده باشن محدود کردن کاربرا خودش ميشه 1 مکافات
همينطور مسئله پشتيبان گرفتن از عکسها
فردا اگه سرور crash کنه بايد جوابشونو بدي
و در آخر اينکه کاربر شما با توجه به نوع کارش و حجم بالاي اطلاعات بايد پي کمي کندي سرعتو به تنش بماله
ممنون دوست من
بنا بنظر دوستان ، ذخیره کردن توی دیتابیس هم میتواند با تکنیکهایی این کار را بهینه سازی کرد . منظورم اینه که افت سرعت توی شبکه و کندی دسترسی و فراخوانی توسط کاربران ، تا آنجائیکه ممکن است کم شود و میخواهیم که پس از طراحی و پیاده سازی ، نگوییم که ایکاش از فلان روش یا تکنیک استفاده میکردیم ، تا حداکثر راندمان و سرویس دهی برنامه را داشته باشیم .
ضمنا ما همه بحثمون در مورد بهترین طراحی نرم افزار و دیتابیس برای حداکثر پرفورمانس هستش و به اینکه اون شبکه اصولا کند هست یا نه ، کاری نداریم

ashkan209
سه شنبه 05 مرداد 1389, 11:20 صبح
لطفا دوستانی که تجربه این مدل پروژه ها را دارند ، نظر و ایده بدهند

ashkan209
سه شنبه 05 مرداد 1389, 11:27 صبح
سلام.........

بستگی به شرایط کاری شبکه داره .

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

البته، شما با آوردن یک عکس یا صفحه برای نمایش باید در پس زمینه چند عکس قبل و چند عکس بعد رو هم Down کنید زیرا به احتمال زیاد کاربر در اقدام بعدی به صفحه قبل یا بعد می رود و چون این صفحه قبلاً آورده شده سرعت شما بالا می رود.

موفق باشید.......باز هم در خدمتیم.

تا آنجائی که من میدانم ، کاربر با زدن شماره پرونده همه اوراق آنرا احتمالا نیاز دارد که برگ برگ ببیند . این اوراق مربوط به یک پرونده میتواند یک برگ باشد و برای پرونده دیگری شاید 50 برگ و یا بیشتر
ضمنا از تکنیکی بنام اندیس گذاری صحبت کردید ، اگر ممکن است بیشتر توضیح بفرمائید
ممنون دوست من

ali_najari
سه شنبه 05 مرداد 1389, 13:35 عصر
با صحبت های hooooman من قاتع و متوجه شدم که باید عکس ها درون دیتابیس ذخیره بشه هم به دلیل امنیتی و هم به دلیل سرعت شبکه.

خیلی از شما ممنونم هومن جان

ali_najari
سه شنبه 05 مرداد 1389, 13:40 عصر
اگه کسی بتونه یه مثال راجع به کار با ایندکس بزاره خیلی ممنون میشم

ali_najari
سه شنبه 05 مرداد 1389, 21:40 عصر
بچه ها یه مشورت:
به نظر شما اگه برنامه تک کاربر باشه بهتره نیست از SQLExpress استفاده کنیم؟
البته ممکنه بعضی از مشتریان بخوان توی شبکه ازش استفاده کنن.

نظرتون چی که برای تک کاربره از SQL Express استفاده کنیم و برای کسایی که میخوان توی شبکه ازش استفاده کنن از SQL Server استفاده کنیم؟

nasim bahari
سه شنبه 05 مرداد 1389, 21:50 عصر
سلام.........

مایکروسافت نسخه اکسپرس رو واسه ی بانک های محلی یا Local برنامه ریزی کرده. پس حتماً برای مواردی که بانک محلی است از نسخه اکسپرس استفاده کن.....

این مورد قبلاً بحث شده و فقط کافیه یه سرچ کنی...............


موفق باشی...

Alghoochi
سه شنبه 05 مرداد 1389, 22:30 عصر
سلام

اگه می خوای عکس ها رو روی بانک اطلاعاتی ذخیره کنی باید به چندتا نکته توجه کنی
اول اینکه فکر حجم بانک اطلاعاتی رو کردی؟ اینکه پس از چند ماه حجم بانک اطلاعاتی چند گیگابایت می شه؟
اونوقت می خوای اونو کجا ذخیره کنی؟
دوم اینکه طراحی بانک اطلاعاتی باید دقیق و سنجیده باشه چون اگه بانک اطلاعاتیت رو نرمال سازی نکنی یا طراحیت دقیق نباشه وقتی حجم بانک اطلاعاتیت بالا بره سرعت دسترسی به اطلاعات کم و کمتر می شه و پس از چند ماه نرم افزار شما عملا کارایی خودش رو از دست می ده. پس طراحی بانک اطلاعاتی خیلی مهمه
حجم اطلاعات بلاگفا 500 گیگابایته (به گفته خود بلاگفا) ولی سرعت لود شدن صفحات بسیار بالاست شاید طراحی دقیق خیلی به این مسئله کمک می کنه.

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

ali_najari
چهارشنبه 06 مرداد 1389, 01:05 صبح
بانک اطلاعاتی مگه چطوری باید طراحی بشه ؟
من چندتا جدول مشخص با فیلدهای مشخص دارم که اطلاعات توش ذخیره میشه و باز خوانی میشه
نوع فیلدهامم مشخصه تقریبا
منم منظورتو از نرمال سازی درست متوجه نشدم
یکم میشه توضیح بدی؟

ali_najari
چهارشنبه 06 مرداد 1389, 01:09 صبح
سلام.........

مایکروسافت نسخه اکسپرس رو واسه ی بانک های محلی یا Local برنامه ریزی کرده. پس حتماً برای مواردی که بانک محلی است از نسخه اکسپرس استفاده کن.....

این مورد قبلاً بحث شده و فقط کافیه یه سرچ کنی...............


موفق باشی...

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

منم منظورم اینه که در این حالت باید چیکار کرد؟

Alghoochi
چهارشنبه 06 مرداد 1389, 10:39 صبح
نرمال سازی یه مبحث در طراحی بانک اطلاعاتیه. مثلا شما می تونی همه اطلاعات رو در قالب یه جدول ذخیره کنی و یا اونا رو به چند جدول تقسیم کنی.
مثلا فرض کن می خوای پرونده ها موضوع بندی بشن. می تونی توی همون جدول اصلی موضوع اونا رو بنویسی. مثلا پرونده صدم : موضوع : موضوع اول
یا می تونی اطلاعات موضوع هات رو توی یه جدول جدا ذخیره کنی و فقط کد اون موضوع رو توی جدول پرونده ها نگه داری

مثلا
موضوع ها:
1.موضوع اول
2.موضوع دوم

حالا توی جدول اصلی به جالی نوشتن موضوع اول فقط کد اونو می نویسی مثلا پرونده صدم کدموضوع:1

و یا اینکه این پرونده توسط چه کسی ایجاد شده؟ آخرین بار توسط چه کسی بازدید شده. سطح دسترسی به این پرونده تو چه سطحیه (این کار برای اینه که بتونی پرونده های محرمانه رو از غیر محرمانه جدا کنی و به همه اجازه دسترسی به همه پرونده ها رو ندی). و ...

این جوری هم حجم بانک اطلاعاتیت کم می شه. این حجم وقتی که تعداد پرونده هات زیاد باشه قشنگ به چشم میاد. چون ذخیره عدد 1 نسبت به موضوع اول خیلی فضای کمتری می خواد.
احتمال خطا کم می شه چون شما نیازی نیست همه متن رو بنویسی فقط کافیه کد اونو بنویسی که این کارم اگه با نرم افزار باشه راحت تره. به علاوه ویرایش عنوان موضوع ها، سطح دسترسی به اونها و ... هم خیلی راحت تر می شه.

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

nasim bahari
چهارشنبه 06 مرداد 1389, 19:04 عصر
منم متوجه هستم که شما چی میگید ولی منظورم اینه که مشتری های نرم افزار من معلوم نیست که میخوان برنامه رو روی شبکه اجرا کنن یا میخوان فقط روی یه کامپیوتر اجرا کنند.

سلام....علی جان

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

موفق باشی....

nasim bahari
چهارشنبه 06 مرداد 1389, 19:09 عصر
بانک اطلاعاتی مگه چطوری باید طراحی بشه ؟
من چندتا جدول مشخص با فیلدهای مشخص دارم که اطلاعات توش ذخیره میشه و باز خوانی میشه
نوع فیلدهامم مشخصه تقریبا
منم منظورتو از نرمال سازی درست متوجه نشدم
یکم میشه توضیح بدی؟

سلام....علی جان

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

موفق باشید