جواد
10 ماه پیش توسط جواد مطرح شد
8 پاسخ

سبد خرید اپ

سلام خدمت برنامه نویس های عزیز . خسته نباشین . یه سوال فوری داشتم لطفا راهنمایی کنید . من یه لیست از محصولات دارم که داخل سبد خرید کلاینتم هست اگر در همین حین صاحب محصول بیاد اون محصول رو در دیتابیس حذف یا تغییر قیمت بده من چطوری در بکند سرور از این اتفاق مطلع بشم و به یوزر خودم اطلاع بدم که تغییر قیمت اتفاق افتاده الان همزمان دارم از مونگو استفاده میکنم . میخوام یه روش بگین که روی سرعت من تاثیر زیادی نداشته باشه من نخوام بیام تمام محصولات داخل لیست خرید رو از دیتابیس تک تک صدا بزنم.... کلا سبد خرید رو چجوری باید مطلع کنم که تغییر یا اتفاقی افتاده و اون محصول رو به روز کنم
@Arshiamohammadei
@Raymond
@MortezaVaezi
@Pouyab
@ossvahid
@FullStack
@hussain2
@Farzadameri


ثبت پرسش جدید
Arshiamohammadei
تخصص : وب و هوش مصنوعی
@Arshiamohammadei 10 ماه پیش آپدیت شد
1

سلام خوبی
ببین برای مطلع شدن از تغییرات در دیتابیس MongoDB به طور زنده و بدون نیاز به صدا زدن تک تک محصولات می‌تونی از مکانیزمی که به نام "Change Streams" شناخته می‌شه استفاده کنی Change Streams امکان رصد تغییرات در یک کالکشن MongoDB را برات فراهم میکنه

برای استفاده میتونی از این مثال استفاده کنی اگه بهم هم بگی که زبونت چیه بیشتر راهنمایی میکنیم

  1. در بکند سرورت یک Change Stream برای کالکشن مربوط به سبد خرید ایجاد کن:

    
    
    const pipeline = [{ $match: { 'fullDocument.productId': { $in: [productId1, productId2, ...] } } }];

const changeStream = db.collection('shoppingCart').watch(pipeline);

changeStream.on('change', (change) => {
// تغییر مربوطه را دریافت کنید
const updatedProduct = change.fullDocument;

// کارهای لازم را انجام دهید، مانند به‌روزرسانی قیمت در سبد خرید کاربر
});



ببین اینجا `productId1`، `productId2` و غیره، شناسه‌های محصول های  هستن که توی سبد خرید شما وجود داره خودت می‌توانی شناسه‌های محصولات مورد نظرو به جای آرایه `[productId1, productId2, ...]` قرار بدی

2. بعد توی بکند سرور، زمانی که صاحب محصول تغییری در محصول اعمال کرد و این تغییر در دیتابیس MongoDB ذخیره شدChange Stream فرمان `changeStream.on('change', (change) => { ... })` رو فراخونی کرده باشه و تغییر مربوطه رو دریافت کنه

حالا در دستگاه کلاینت خودت که با سرور ارتباط برقرارکرده خودت می‌تونی تغییرات رو دریافت کنی و سبد خرید کاربر رو به‌روز کنی همین

## لطفاً توجه داشته باشید که برای استفاده از Change Streams، نسخه MongoDB شما باید حداقل 3.6 باشد.

Arnold
تخصص : eat sleep
@idmoted 10 ماه پیش آپدیت شد
0

سلام
یک راه هست به نام اخیر
شما باید کاری کنی که هرکسی که آپدیت میکنه طی یک روز بیاد تو یک صفحه ای و تو باید هروز صفحه رو چک کنی بهرحال ممکنه شلوغی هم اتفاق بیفته و راهی فکر نکنم جزء این باشه
صفحه آپدیت:

$conn = (database name)
if (isset($_GET['up'])) {
//    فلان فلانو پشمدان..
//    :اخرش
    $conn->query("INSERT INTO notif (notif) VALUES ('update in id = ". $_GET[up] ."')");
}

تایمر یک روزشو تنظیم کن در php
سپس تو صفحه یوزرت


<?php  
//$time = (23:59:59)<-مثال;  
$conn = new PDO("mysql:local=host;dbname=amir", 'root', '1234');  
$notif = $conn->;query("SELECT notif FROM notif WHERE time = '".$time."'")->fetchAll(PDO::FETCHASSOC);  
?>  
<div><?php echo $notif;?></div>

اینا همش مثاله درحد راهنمایی و کد کامل نیست و میتونی تقریبا بر اساس این یک کاری بکنی
این نمونه کد اگر تایمرش رو درست کنی اینطوری کار میکنه که هرکی آپدیت میکنه قیمت چیزیو تو دایوه نمایشش میده


جواد
@jojo321 10 ماه پیش مطرح شد
0

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


Arshiamohammadei
تخصص : وب و هوش مصنوعی
@Arshiamohammadei 10 ماه پیش آپدیت شد
1

سلام خوبی
ببین برای مطلع شدن از تغییرات در دیتابیس MongoDB به طور زنده و بدون نیاز به صدا زدن تک تک محصولات می‌تونی از مکانیزمی که به نام "Change Streams" شناخته می‌شه استفاده کنی Change Streams امکان رصد تغییرات در یک کالکشن MongoDB را برات فراهم میکنه

برای استفاده میتونی از این مثال استفاده کنی اگه بهم هم بگی که زبونت چیه بیشتر راهنمایی میکنیم

  1. در بکند سرورت یک Change Stream برای کالکشن مربوط به سبد خرید ایجاد کن:

    
    
    const pipeline = [{ $match: { 'fullDocument.productId': { $in: [productId1, productId2, ...] } } }];

const changeStream = db.collection('shoppingCart').watch(pipeline);

changeStream.on('change', (change) => {
// تغییر مربوطه را دریافت کنید
const updatedProduct = change.fullDocument;

// کارهای لازم را انجام دهید، مانند به‌روزرسانی قیمت در سبد خرید کاربر
});



ببین اینجا `productId1`، `productId2` و غیره، شناسه‌های محصول های  هستن که توی سبد خرید شما وجود داره خودت می‌توانی شناسه‌های محصولات مورد نظرو به جای آرایه `[productId1, productId2, ...]` قرار بدی

2. بعد توی بکند سرور، زمانی که صاحب محصول تغییری در محصول اعمال کرد و این تغییر در دیتابیس MongoDB ذخیره شدChange Stream فرمان `changeStream.on('change', (change) => { ... })` رو فراخونی کرده باشه و تغییر مربوطه رو دریافت کنه

حالا در دستگاه کلاینت خودت که با سرور ارتباط برقرارکرده خودت می‌تونی تغییرات رو دریافت کنی و سبد خرید کاربر رو به‌روز کنی همین

## لطفاً توجه داشته باشید که برای استفاده از Change Streams، نسخه MongoDB شما باید حداقل 3.6 باشد.

میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 10 ماه پیش مطرح شد
1

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


جواد
@jojo321 10 ماه پیش آپدیت شد
0

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

@Arshiamohammadei


جواد
@jojo321 10 ماه پیش مطرح شد
0

سلام از بندس ممنون از راهنمایی .بالا عرض کردم نمی خوام دیتابیس رو دائما فچ کنم توی سبد خرید 10 تا محصول باشه و 200 تا کاربر توی مدت کوتاهی بخوان بیان سبد خرید چک کن 2000 هزار دیتا بیس فچ میشه اگه راه بهتری برای فهمیدن تغییرات توسط کاربر باشه ممنون میشم بگین یا حتی دیتابیس دیگه این قابلیت رو داشته باشه یه روش بهینه تر باید باشه
@FullStack


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 10 ماه پیش آپدیت شد
0

دوست عزیز شما برای اینکه قیمت محصول رو بدست بیارید مجبورید اون محصول رو از دیتابیس پیدا کنید من منظورتون از اینکه بدون فچ کردن محصول رو قیمتشو بخوای در بیاری درک نمیکنم هر محصول یک قیمتی داره باید اون محصول رو پیدا کنه بعد قیمتشو در بیاری مگه اینکه بخوای هر کاربری که محصولی به سبد خریدش اضافه میکنه یه سبد خرید براش توی دیتابیس ایجاد بشه با ایدی خودش و قیمت محصول اونجا هم اضافه بشه و اگر قیمت محصول تغییر کرد هم از محصولات و هم اگه توی سبد خرید بود از اونجا قیمتش تغییر کنه


جواد
@jojo321 10 ماه پیش مطرح شد
0

یه سبد خرید براش داخل دیتابیس ساختم میخوام تغییراتی که رخ میده برای محصول سبد خرید ازش مطلع بشه و اونجا هم بتونم تغییر بدم.نمی خوام از سمت کلاینت دنبال تغییر برم میخوام بعد از اپدیت یه محصول سرور متوجه بشه و سبد خرید کلاینت رو به روزرسانی کنه و نه همه رو سرچ بزنه فقط دنبال همون محصول مدنظر باشه و فقط هم وقتی قیمت یا موجودی تغییر میکنه این اتفاق بیفته
@FullStack


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام