PDA

View Full Version : سرعت اجرا فایل بیشتر است یا دیتابیس؟



drawback
یک شنبه 27 اردیبهشت 1394, 12:20 عصر
با سلام خدمت دوستان گل برنامه نویس
من تازه اندورید رو شروع کردم میخوام ی دیکشنری بنویسم موندم که تو فایل ذخیره کنم یا از sqlite استفاده کنم؟
بنظر شما سرعت کدوم یکی بیشتر هستش؟
ممنون از کمکتون.

hamid_hr
یک شنبه 27 اردیبهشت 1394, 12:22 عصر
برا دیکشنری فک کنم sqlite بیشتر باشه
شما میتونی ایندکس گذاری کنی حتی

JYasProgramer
یک شنبه 27 اردیبهشت 1394, 17:23 عصر
دیتابیس دیتابیس دیتابیس
واسه تاکید سه بارنوشتم:لبخندساده:

slr560
یک شنبه 27 اردیبهشت 1394, 18:36 عصر
از نظر سرعت قطعا از روی فایل خوندن سرعت بیشتری داره . ولی برای کار شما صحیح تر این هست که از روی دیتابیس بخونید

و اینکه سرعت خوندن از دیتابیس یا فایل به قدری زیاد هست که اصلا شما حس کند بودن نمیکنی . مگه اینکه بخوای توی میلیون یا میلیارد رکورد جستجو کنی
و قاعدتا یکم مکس طبیعی هست . خود google translate هم وقتی آفلاین هست یکم مکس داره :چشمک:

pbm_soy
دوشنبه 28 اردیبهشت 1394, 01:45 صبح
خوب میشد دوستان نظراتشون را با دلیل مطرح میکردن و میگفتن به چه دلیل کدوم یکی بهتر است یا ترجیح میدهند!

* در حالت فایل
1- در برنامه دیکشنری هیچ عمل ذخیره ، ویرایش و حذف اطلاعات صورت نمیگیرد و صرفا جستجو و نهایتا لیست گیری انجام میشود (البته در برنامه های دیکشنری که من دیدم مگر اینکه بخواهیم به کاربر چنین امکاناتی را بدهیم که بد هم نیست!)
2- اگر فایل دیکشنری برنامه ای مانند fastDic را در نظر بگیریم و دیتابیس آنرا تبدیل به یک فایل متنی کنیم (فقط بخش انگلیسی به فارسی) من انجام دادم حدود 60 هزار لغت با معنی (رکورد) داشت که در یک فایل متنی ذخیره کنیم حدود 5 مگابایت حجم فایل متنی میشود (فایل متنی با فرمت یونی کد ایجاد شد)
3- فایل متنی را در دایرکتوری asset میتوان نگهداری کرد و مستقیم میتوان از همانجا آنرا باز کرد و خواند
4- با توجه به مورد بالا لود کردن کل فایل متنی در حافظه رم (آرایه) امکان پذیر است و از این پس کل کار جستجو و لیستگیری را میتوان بروی آن آرایه انجام داد


* در حالتی که دیتابیس باشد
1- براساس فیلد خاصی میتوان ایندکس داشت تا سرعت جسجو را بالا ببرد (در حالت فایل چون فایل در رم لود میشود سرعت جستجو طبیعتا بالا خواهد بود ولی میتوان خود آرایه را یکبار مرتب کرد و جستجو را بروی آرایه مرتب شده انجام داد)
2- تنوع یا داشتن امکانات خوب در جستجوها و لیست گیر ی توسط دستورات SQL (البته میتوان این امکانات را در جسجتو بروی آرایه نیز با استفاده از الگوریتمهای ساده پیاده سازی کرد)
3- دیتابیس در باز اول اجرای برنامه حتما باید به دایرکتوری data برنامه کپی شود (در حالت فایل میتوان محتوای فایل را مستقیما از دایرکتوری asset خواند و نیازی به کپی نیست)

* نکات و جزئیات در این رابطه زیاد است ولی من به همین موارد اکتفا میکنم
منتظر نظرات دوستان هستم
4-

pbm_soy
دوشنبه 28 اردیبهشت 1394, 02:10 صبح
چند نکته دیگر را فراموش کردم که عنوان کنم
بخاطر حساس بودن موضوع و مهم بودن حتما لازم میدانم مطرح کنم چون به عنوان مثال نرم افزار آموزشی دیده بودم که از دیتابیس استفاده میکرد در واقع در دیتابیس محتوای آموزشی بود و یا نرم افزار قرآن را دیدم (چندین مورد) که متن قرآن در دیتابیس بود که حدود 6 هزار و خورده ای آیه دارد (اگه درست یادم مانده باشد)

از آوردن این مثالها منظور داشتم ،برنامه هایی که دیده بودم تحت ویندوز بودن نه آندروید و در بار اول اجرا و یا در زمان نصب APIها و یا درایورهای آن نوع دیتابیسی که برنامه از آن استفاده میکرد را نصب میکردن!
پس برنامه برای کار با دیتابیس یک بار اضافی را خواهد داشت یعنی باید آن APIها لود شوند و اجرا شوند در حالی که برای کار بایک فایل ساده نیازی به همچین مواردی نیست! (البته نمیگم برای کار با فایل APIی لود نمیشود اگر لود هم میشود حجم کم و میزان بار پردازشی پایینتر نسبت به APIهای دیتابیس دارند)

من این موارد باتوجه به تجارب ویندوزیم گفتم ولی فکر نمیکنم فرق آنچنانی با آندروید داشته باشد در آندرویدی هم کلاس DatabaseHelper باید لود شود و از متدهای آن استفاده شود که در آن هم از کلاسها و اشیاء SqLite استفاده میشود

در این برنامه ها این محتواها اضافه و کم نمیشوند حتی بخواهیم اضافه و کم و یا تغییراتی هم در فایل دیتا داشته باشیم میتوان کار را بروی آرایه انجام دهیم و نهایتا در یکبار نوشتن کل فایل را بروی فایل بنویسیم و یا برای مرتب کردن هم به همین ترتیب عمل میکنیم

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

JYasProgramer
دوشنبه 28 اردیبهشت 1394, 08:31 صبح
من در یک کتابی خوندم که فایل دیتابیس SQLite این توانایی رو داره که پس از open شدنش در حافظه بازگذاری میشه و ارجاعات فوق العاده سریعتره

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

pbm_soy
دوشنبه 28 اردیبهشت 1394, 23:35 عصر
روش خواندن فایل به برنامه نویس بستگی دارد همون اول کار یکبار کل فایل را میخوانید ودر ارایه ذخیره میکنید. ویا کل دادهای جدید را در ارایه ذخیره میکنید ودر نهایت یکبار ارایه را در فایل ذخیره میکنید

البته در مورد لود شدن دیتابیس sqlite در رم هم درسته ولی این نکته را هم مدنظر بگیرید که چه میزان api و پراسس برای اینکار درگیر میشود و یا چه میزان کد باید نوشت