View Full Version : سوال: ذخیره ی عکس در دیتابیس
MohsenTi
شنبه 01 تیر 1387, 02:30 صبح
دوستان خسته نباشید .
می خواستم ببینم اگر تعداد زیادی عکس (5000) را در یک دیتابیس ذخیره کنیم آیا دیتابیس دچار مشکل میشه یا نه واگر میشه چه مشکلاتی و راه حل اونا چیه ؟
دیتابیس من اکسس است.
پیشا پیش از همه متشکرم .
saleh_fartash
شنبه 01 تیر 1387, 08:06 صبح
تا او نا جا یی که دوستان من رو راهنمایی کردن در اکسس میشه ولی در اس کیو ال نه.
(من قبلا در این باره بحث کردم)
اگه کسی راه حل بهتری می دونه بگه.
hentjanson
شنبه 01 تیر 1387, 09:26 صبح
براي رفع اين كند شدن مي توانيد :
از اين روش استفاده كنيد عكس رو در بانك قرار ندهيد . ادرس رو در بانك قرار دهيد و عكس رو به داخل يك پوشه ببريد .
من از همين روش استفاده مي كنم و داراي 2500 ركرد ثابت هستم در صورت نياز اگه متوجه نشديد بگيد يك مثال براتون بزنم .
sma_mohseni
شنبه 01 تیر 1387, 10:57 صبح
منم از همین روشی که آقای hentjanson گفتند استفاده میکنم
هیچ مشکلی نداره
MohsenTi
شنبه 01 تیر 1387, 19:49 عصر
از راه حل دوستان متشکرم اما من می خوام عکس ها تو دیتابیس باشند وغیر قابل دیدن .
matinebi
یک شنبه 02 تیر 1387, 06:16 صبح
لطفا یک مثال قرار دهید
آقای hentjonson
moonplant
یک شنبه 02 تیر 1387, 10:35 صبح
از راه حل دوستان متشکرم اما من می خوام عکس ها تو دیتابیس باشند وغیر قابل دیدن .
امیدوارم تاپیک را منحرف نکرده باشم:
یعنی تنها راه حل برای اینکه عکس ها غیر قابل دیدن باشند، ذخیره کردن آنها در دیتابیس است؟
از دوستان می خواهم روش هایی را که برای حفاظت از عکس هایی که درون یک پوشه وجود دارند، نام ببرند.
منظورم از حفاظت اینست که کاربر ها نتوانند به مسیری که برنامه در آن نصب شده است بروند و تمام 1000 تا عکس شما را که درون آن پوشه قرار دارد، ببینند. شاید قرار دادن این عکس ها درون یک dll یک راه حل باشد، راه حل های بهتری سراغ دارید؟
-ممنون
kernel
یک شنبه 02 تیر 1387, 11:13 صبح
ذخیره عکس در دیتا بیس اکسس به تعداد زیاد مشکل ایجاد میکنه
اگه بخوای حتما عکستو توی دیتا بیس ذخیره کنی میتونی از یه کامپوننت به نام DBPix استفاده کنی
این کامپوننت عکس ها رو با فرمتی مخصوص توی دیتا بیس ذخیره می کنه و هیچ کس جز خود این کامپوننت نمیتونه عکس ها رو باز کنه ( اینم خودش یه جور امنیته ) .
یکم تو وب سرچ کنی می تونی این ابزارو پیدا کنی
MohsenTi
یک شنبه 02 تیر 1387, 12:36 عصر
دوست عزیز moonplant
برای مخفی کردن راههای زیادی هست مثل سیستمی کردن فایل ها ولی اگر همه ی فایل ها در یک فایل قرار گیرند مدریت آنها راحتتر است .
فرض کنید می خواهید از همه ی فایل ها بکاپ بگیرید .
dkhatibi
یک شنبه 02 تیر 1387, 12:44 عصر
ترجیحا برای عکست یک جدول مجزا در نظر بگیر
babak_delphi
یک شنبه 02 تیر 1387, 14:49 عصر
به نظر من هم استفاده از دیتا بیس (مثلا MS SQLServer) بهتره
اون راهی که در پست شماره 9 در مورد استفاده از کامپوننت اختصاصی این کار گفته شد خوب به نظر میرسه
ضمنا اگر نخواهید از دیتا بیس استفاده کنید میتونید اونها را ریسورس کنید و در حقیقت در داخل فایل exe نگه دارید
ولی باز هم میگم به نظر من استفاده از دیتابیس بهتره
بخصوص اگر برای امنیت از ابزاری مثل کامپوننتی که در پست شماره 9 معرفی شد استفاده کنید.
moonplant
یک شنبه 02 تیر 1387, 19:43 عصر
کامپوننت DBPix همراه با یک دیتابیس مثل access و ... به کار می رود؟ یعنی برای اینکه برنامه ما در کامپیوتر کاربر اجرا شود باید حتماً access و ... نصب باشد؟
کلاً وقتی تعداد عکس هایی که در برنامه مان با آنها سر و کار داریم، زیاد است... کدام روش سریع تر است؟ الف)ذخیره کردن عکس ها در دیتا بیس ب)گذاشتن عکس ها در یک پوشه و ذخیره کردن نام عکس در دیتابیس
ealvandi
یک شنبه 02 تیر 1387, 22:22 عصر
میتونید اونها را ریسورس کنید و در حقیقت در داخل فایل exe نگه دارید
میخواستم بدونم چجور میشه چند فایل با هر نوعی رو در یک فایل کابین (جمع) کنم . به طوری که قابل دسترسی و نفوذ نباشه.
هدفم اینه که حدود 1000 تا فایل jpg با ظرفیت هر فایل حدود 100 کیلو بایت رو در یک فایل جمع کنم که کاربر نتونه محتواش رو ببینه البته به راحتی قابل بازیابی هم باشه .
شاید قرار دادن این عکس ها درون یک dll یک راه حل باشد، راه حل های بهتری سراغ دارید؟
فکر میکنم ان راه حل بهترین راه حله که سرعت دیتابیس رو هم پائین نمیاره . چجوری میشه این کارو کرد ؟
hentjanson
یک شنبه 02 تیر 1387, 22:57 عصر
در پوشه به نظر من بهتره چون اينطوري بهتره بانك سبك تره .
بازم اين نظر من اگه اينطور نيست اشتباه منه
babak_delphi
دوشنبه 03 تیر 1387, 00:24 صبح
اگر در پوشه باشه که دیگه همه میتونند به اونها دسترسی داشته باشند
اونوقت باید برید سراغ محافظت از پوشه و ...
ealvandi
دوشنبه 03 تیر 1387, 03:23 صبح
اونوقت باید برید سراغ محافظت از پوشه
من با folder lock کار کردم . مشکل داره .
شما چه راهی معرفی میکنید ؟
moonplant
دوشنبه 03 تیر 1387, 12:44 عصر
من با folder lock کار کردم . مشکل داره .
شما چه راهی معرفی میکنید ؟
zipforge رو هم امتحان کن.
لطفاً یکی از اساتید بیاید و این سوال راپاسخ دهد:
وقتی تعداد عکس هایی که در برنامه مان با آنها سر و کار داریم، زیاد است... کدام روش سریع تر است؟ الف)ذخیره کردن عکس ها در دیتا بیس ب)گذاشتن عکس ها در یک پوشه و ذخیره کردن نام عکس در دیتابیس(البته پوشه محافظت شده هم هست)
-خیلی ممنون
babak_delphi
دوشنبه 03 تیر 1387, 13:41 عصر
از دیتابیس استفاده کنید
اگر با سرعت مشکل داشتید قبل از اجرا عکسها را روی هارد کپی کنید و در انتها دوباره حذف کنید
برای هرچه کمتر شدن زمانِ ریختن فایلها بر روی هارد ، عکسها را به ترتیبی که استفاده میشوند روی هارد کپی کنید
ولی در کل اگر مجبور نبودید این کار را نکنید و مستقیمأ با دیتا بیس کار کنید یا فایها را ریسورس کنید و در همان فایل exe نگهدارید
ealvandi
دوشنبه 03 تیر 1387, 16:14 عصر
یا فایها را ریسورس کنید و در همان فایل exe نگهدارید
2 بار به این موضوع اشاره کردید اما نگفتید چجوری !!
قبل از اجرا عکسها را روی هارد کپی کنید و در انتها دوباره حذف کنید
به نظر کار منطقی نمیاد - اصل هدف ما در این جا محافظت از عکسهاست و اگر این کار رو انجام بدیم احتمال داره کاربر مسیر ذخیره فایل رو بدونه و دیگر هیچ !!!!!!!!!!!
babak_delphi
سه شنبه 04 تیر 1387, 00:27 صبح
در باره مورد اول که گفتید :
http://delphi.about.com/od/objectpascalide/a/embed_resources.htm
در سایت هم جستجو کنید
در این آدرس هم نحوه اضافه کردن فونت به فایل exe هست که اون رو هم از طریق ریسورس انجام داده
http://delphiclinik.blogfa.com/post-86.aspx
درباره مورد دوم هم خودم که گفتم
ولی در کل اگر مجبور نبودید این کار را نکنید
babak_delphi
سه شنبه 04 تیر 1387, 01:04 صبح
Type Parameter
Syntax {$R filename}
{$RESOURCE filename}{$R *.xxx}
{$R filename.res filename.rc}
Scope Local
Remarks
The $R directive specifies the name of a resource file to be included in an application or library. The named file must be a Windows resource file and the default extension for filenames is .res. To specify a file name that includes a space, surround the file name with single quotation marks: {$R 'My file'}.
The * symbol has a special meaning in $R directives: it stands for the base name (without extension) of the source-code file where the directive occurs. Usually, an application’s resource (.res) file has the same name as its project (.dpr) file; in this case, including {$R *.res} in the project file links the corresponding resource file to the application. Similarly, a form (.dfm or xfm) file usually has the same name as its unit (.pas) file; including {$R *.dfm} in the .pas file links the corresponding form file to the application.
{$R filename.res filename.rc} (where the two occurrences of 'filename' match) makes the .rc file appear in the Project Manager. When the user opens the .rc file from the Project Manager, the String Table editor is invoked.
When a {$R filename} directive is used in a unit, the specified file name is simply recorded in the resulting unit file. No checks are made at that point to ensure that the filename is correct and that it specifies an existing file.
When an application or library is linked (after compiling the program or library source file), the resource files specified in all used units as well as in the program or library itself are processed, and each resource in each resource file is copied to the executable being produced. During the resource processing phase, the linker searches for .res files in the same directory as the module containing the $R directive, and in the directories specified in the Search path input box on the Directories/Conditionals page of the Project|Options dialog box (or in the directories specified in a -R option on the DCC32 command line).
توضیح help دلفی درمورد فایل ریسورس
AFTABGARDAN2006
سه شنبه 04 تیر 1387, 09:43 صبح
آیا کاربران شما به بانک اطلاعاتی شما دسترسی دارند یا نه ؟
AFTABGARDAN2006
سه شنبه 04 تیر 1387, 09:50 صبح
هر کدام از روشها مزیتهای و معایب خاص خود را دارند
مثلاً ذخیره در دیتابیس باعث می شه به مرور زمان حجم دیتابیس زیاد بشه (که SQL مشکل اضافه حجم نداره) ولی در سرعت دسترسی به اطلاعات شما تاثیر می گذاره
ذخیره عکس روی هارد و نگهداری آدرس آن در بانک نیز ممکنه که عکس شما به هر دلیلی پاک بشه ولی در بانک شما هنوز آدرسش موجود باشه و....
ealvandi
سه شنبه 04 تیر 1387, 11:06 صبح
با تشکر از vcldeveloper عزیز بابت راهنمایشون.
برای این کار برای اینکه سرعت پائین نیاد بهتره که عکسها رو در یک فولدر ذخیره کنید . برای تامین امنیت عکسها هم میتونید اونهارو encrypt کنید یا توسط zlib فشردش کنید.
موفق باشید.
babak_delphi
سه شنبه 04 تیر 1387, 13:47 عصر
اگر عکسها را با zlib فشرده کند در زمان استفاده مجددأ باید extract شوند که اگر حجم داده ها زیاد باشد (که ظاهرا همین طور خواهد بود)این کار بسیار زمان بر و کند خواهد شد
ضمنا آیا با zlib می توان فولدر را نیز فشرده کرد؟
vcldeveloper
سه شنبه 04 تیر 1387, 15:34 عصر
ذخیره عکس در بانک یا در فایل بستگی به فاکتورهای مختلفی داره، اینکه کسی تصور بکنه ذخیره عکس در بانک بهترین گزینه هست، یا بالعکس، تصور اشتباهی هست. هر کس باید با توجه به نوع استفاده ایی که برای برنامه در نظر گرفته، نقش عکس ها در برنامه، نوع بانک اطلاعاتی که میخواد استفاده کنه، تعداد و حجم تقریبی عکس ها، امنیت داده ها، چگونگی ایجاد Backup، و سایر فاکتورها تصمیم بگیره که از چه روشی برای ذخیره عکس استفاده کنه.
اکثرا اعلام می کنند که ذخیره عکس در بانک موجب کند شدن بانک میشه. در حالی که این مورد مستقیما به نوع بانک اطلاعاتی، چگونگی طراحی بانک، Queryهایی که برای دریافت عکس نوشته میشند، و سروری که بانک روی آن قرار میگیره، ارتباط داره. مثلا اگر فردی در SQL Server نوع فیلدهای عکس و نحوه ذخیره آنها در بانک را به درستی تنظیم کنه، حتی الامکان داده های مربوط به عکس را جدای از سایر داده ها نگهداری کنه - مثلا با استفاده از File Group- ایندکس های مناسب روی بانک بزاره، کوئری ها را طوری بنویسه که فقط داده هایی که در هر لحظه نیاز داره را دریافت کنه، و... همچین فردی مشکل خاصی با حجم بالای بانک به دلیل وجود عکس های زیاد نخواهد داشت! از طرفی، جستجو برای پیدا کردن یک فایل عکس در یک پوشه با چند هزار فایل هم کار چندان سریعی نخواهد بود. البته ذخیره در فایل هم مزایای خودش را دارد، مثلا در یک برنامه تحت وب، تصاویر باید نهایتا بصورت فایل به مرورگر ارسال شوند، پس ذخیره آنها در بانک موجب ایجاد یک مرحله کار اضافه می شود.
اگر عکسها را با zlib فشرده کند در زمان استفاده مجددأ باید extract شوند که اگر حجم داده ها زیاد باشد (که ظاهرا همین طور خواهد بود)این کار بسیار زمان بر و کند خواهد شد
اگر قرار باشه امنیت محتوای فایل های - نه امیت فایل ها در برابر تغییر یا حذف- تامین شود، یکی از راههای ساده استفاده از همین ZLib هست. برنامه نویس میتواند هر فایل را قبل از ذخیره بر روی دیسک با این روش فشرده کند و در زمان لود فایل، آن را از حالت فشردگی خارج کند. نیازی نیست که همه فایل ها بطور همزمان از فشردگی خارج شوند، چون برای هر درخواست به یک یا حداکثر چند فایل نیاز خواهد بود، نه کل فایل ها.
ضمنا آیا با zlib می توان فولدر را نیز فشرده کرد؟
خیر. اگر هم امکان پذیر بود، کار معقولی به نظر نمی رسید، چون برای باز کردن هر فایل، باید کل فایل های فشرده شده، یا حداقل فایل های فشرده شده قبل از فایل مورد نظر Extract شوند، مثلا برای باز کردن فایل هزارم، باید 999 فایل قبل از آن هم Extract شوند! مسلما این روش بسیار کندتر از فشرده کردن فایل ها بصورت منفرد خواهد بود.
hentjanson
سه شنبه 04 تیر 1387, 15:45 عصر
سلام دوستان
من تصاوير رو به داخل يك پوشه ميبرم و نام رو به بانك حالا مي خوام بدونم چطور ميشه اين روند zlib رو انجام داد .
ealvandi
چهارشنبه 05 تیر 1387, 00:27 صبح
مي خوام بدونم چطور ميشه اين روند zlib رو انجام داد
zlib در خود دلفی ارائه شده و احتمالا یک unit به همین اسم وجود داره.
babak_delphi
چهارشنبه 05 تیر 1387, 00:59 صبح
برای این کار برای اینکه سرعت پائین نیاد بهتره که عکسها رو در یک فولدر ذخیره کنید . برای تامین امنیت عکسها هم میتونید اونهارو encrypt کنید یا توسط zlib فشردش کنید
من با توجه به این گفته دوستمون گفتم که extract کردن اون زمان بر خواهد بود ، چون ایشون گفتند عکسها را در فولدر قرار دهند
من تصاوير رو به داخل يك پوشه ميبرم و نام رو به بانك حالا مي خوام بدونم چطور ميشه اين روند zlib رو انجام داد
اینجا هم میبینید که این دوستمون می خواهند این کار رو انجام بدن
به هر حال باز هم میگم که به نظر من این کار صحیح نیست
در این مورد فکر میکنم همون دیتا بیس مناسب باشه و به قول شما تک تک فایلها رو با zlib فشرده کنند و در بانک قرار بدهند.
babak_delphi
چهارشنبه 05 تیر 1387, 01:02 صبح
ضمنا در جواب hentjanson عزیز هم باید بگم که zlib یک unit به همین نام داره و در مورد نحوه استفاده از اون قبلا در سایت توضیح داده شده
جستجو کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.