PDA

View Full Version : آپدیت بانک اطلاعاتی برنامه از روی هاست



ali reza mansoori 2
شنبه 22 آذر 1393, 12:16 عصر
سلام دوستان
یه جدول دارم روی هاست که نام و مشخصات افراد به همراه مسیر عکس طرف داخلش ذخیره شده
حالا میخوام وقتی به این جدول اطلاعات اضافه یا حذف کردم روی اپ کاربران هم اعمال بشه یعنی اگر مشخصات رو روی بانک هاست اضافه کردم روی اپ مشخصات طرف به همراه عکسش بیاد یا اگر از بانک هاست پاک کردم داخل اپ موبایل هم پاک بشه
میخواستم روش و اصول این کار رو کامل توضیح بدید
این که چه بانکی باید داخل اپ داشته باشم و چجوری فیلد های اضافه یا حذف شده رو تشخصی بدم و اعمال کنم
خیلی ممنون

storm_saeed
شنبه 22 آذر 1393, 15:44 عصر
این جور سوالات روش های مختلفی داره برای پیاده سازیشون ولی مساله مهمی که باید توجه داشته باشید اینه که باید به بهینه ترین شکل ممکن زده بشه مثلا ساده ترین راه اینه هر سری بیاد از دیتابیس کل اطلاعات رو بگیره ولی این درست نیست چون هزینه بره هم از لحاظ تعداد کویری وهم پهنای باند .یه روش ساده و بهینه اینه که شما بیاین هر دیتایی که ویرایش یا حذف یا اضافه شد یه زمان مثلا به ثانیه رو براشون ست کنید پس این طوری زمان اخرین تغییر هر دیتا رو داریم خب حالا یوزر کافیه ثانیه اخرین بروزرسانی برنامه شو بفرسته سمت سرور و سرور هم یه جیسون حاوی اطلاعات جدید بعد اون تاریخ رو بفرسته خب حالا اگه id دیتایی تو برنامه نبود یعنی جدیده باید اضافه بشه اگه id دیتایی بود یعنی اینکه ویرایش شده و اگه id دیتایی که حدف شده رو میتونید اون هایی در نظر بگیرید که از اون تاریخ به بعد سطر دیتابیسشون خالی شدن و این رو تویه ابجکت دیگه از جیسون دخیره کنید یعنی اون هایی که پاک شدن و تو برنامه هر چی دیتا که id هاشون تو این ابجکت هستن رو پاک کنید
حالا شاید بخواین بلافاصله بعد از تغییر تو دیتابیس تو برنامه کاربر هم تغییر پیدا کنه تو حالت قبل برنامه میومد به سرور ریکویست میزد ولی تو این مدل سرور باید به گوشی ریکویست بزنه برای این کار باید از push notification استفاده کنید البته این روش به نظرم بیشتر دردسر داره چون باید حالت هایی که مثلا یوزری هفته ها نیومده و تازه به اینترنت وصل شده رو هندل کنید که چطور دیتا جدید بگیره و از این جور چیزا
یه نکته ای هم راجع به سمت سرور بگم . دقت کنید که از روش های مرسوم که یوزر به یه ادرسی Post میکنه و تویه سرور میرید وصل میشید به mysql و دیتا رو میکشید بیرون و به یوزر نشون میدید استفاده نکنید چون این طوری هم صف طولانی تری تشکیل میشه هم زمان بره هم بهینه نیست در کل . برای این کار از دیتابیس های In memory یا به اصطلاح no sql ها استفاده کنید

ali reza mansoori 2
شنبه 22 آذر 1393, 18:39 عصر
دم شما گرم
روشی هم که مد نظرم بود تقریبا همین جوری بود ولی شما کامل توضیح دادید و کامل متوجه شدم دست شما درد نکنه
پیاده کردنش زیاد مشکل نیست به غیر از همون قسمت آخر که واقا گیج شدم
روش های که برای دریافت اطلاعات از هاست شنیدم اینا بوده که نمیدونم چی رو استفاده کنم

soap و وب سرویس ها
post یا get کردن اطلاعات به یک صفحه php
rest که اصلا متوجه نشدم چجوریه
و همین no sql که شما فرمودید

اگه امکان داره بهترین رو معرفی و یه سر نخ بدید برای پیاده کردنش (مثل کتابی - سایتی - نمونه پروژه ای یا هر چیز دیگه ای)

storm_saeed
شنبه 22 آذر 1393, 19:22 عصر
ببینید مثلا ریکوئست زدن به دیتابیس در صورت عدم استفاده از Nosql اینطوریه
وب سرور مثلا آپاچی -> کد php تفسیر میشه -> درخواست کوئری به دیتابیس مثلا Mysql-> دیتابیس تو هارد ذخیره شده پس فراخوانی به این صورته که میاد اول ایندکس میزنه به یه جا و میارتش تو رم (ایندکس زدن به حافظه ای مثل هارد هزینه بره از این نظر که تفاوت زمانی داره در حد تفاوت سرعت رم و هارد که 1000 برابر یا بیشتره)
خب الان این جا یوزر باید کلی منتظر بمونه برای جواب و اگه تعداد یوزر ها در لحظه زیاد شن خیلی بد میشه پهنا باند اضافی ، کویری های زیاد ، دسترسی زیاد به حافظه ، ... میان از Nosql مثل redis استفاده میکنن که یه دیتابیس رو رم داره بر اساس key , value و تا زمانی که سرور روشن باشه ما دیتابیس رو داریم یعنی اگه سرور ریست شه دیتابیس میپره البته برا این مشکل کش میزنن که هر چند دیقه خودش یه کش رو حافظه درست کنه خب الان سرعت 1000 برابر شد و هزاران برابر بهینه تر . بهترین کار هم اینه که از nodejs و redis مثلا استفاده کنین . من طبق تجربه php واقعا برای اینجور کار ها performance افتضاحی داره
پس بهترین راه فعلا همون چهارمی هس . آموزشاشم صرفا کافیه زبون مورد نظری که میخواید باهاش کد بزنید مثلا نود js پایتون یا هرچی رو تهش + redis یا + nosql رو تو گوگل سرچ کنید
حالا یه سری روش های بهینه تر هم هست الان تو روش بالا احتمال داره چند نفر یه جور دیتا رو بخوان پس ریکوئست چند باره با دیتا یکسان داره به سرور میخوره که بازم بهینه نیست مثلا میان خود وب سرور برا خودش محاسبات رو انجام میده و رویه دیسک برا خودش یه سری اطلاعات ذخیره میکنه مثلا مثلا اینطروی (البته تو مشکل شما شاید خیلی جالب نشه ) مثلا از امروز تا دیروز رو یه فایل درست کنه از امروز تا پریروز رو یه فایل دیگه .... که تو برنامه مثلا بگین اگه اگه اخرین سینک دیتا پریروز بود به url فلان ریکوئست بزن اگه 10 روز پیش بود فلان .... که اینطوری عملا یه زبان سطح بالا + دیتابیس چهnosql چه sql رو حذف کردید البته گفتم تو این روش جالب شاید نباشه ولی اینم یه راه حل بهینه تر دیگس