Heim  >  Artikel  >  Web-Frontend  >  Die Kraft der AGGREGATION bei Cron-Jobs und Kosteneffizienz

Die Kraft der AGGREGATION bei Cron-Jobs und Kosteneffizienz

Patricia Arquette
Patricia ArquetteOriginal
2024-09-24 06:16:06659Durchsuche

The Power of AGGREGATION in Cron Jobs and Cost-Effectiveness

Bei der Arbeit an meinem SaaS-Produkt habe ich herausgefunden, dass man für 10.000 Benutzer täglich 10.001 Abfragen mit regelmäßigen DB-Abfragen zum Zurücksetzen von Guthaben oder kostenlosen Aufforderungen benötigen würde. Mit der intelligenten Aggregation benötigen Sie nur 2 Abfragen, egal ob Sie 10.000 oder 100.000 Benutzer haben!

Lassen Sie mich zunächst einen KOSTENÜBERSICHT für die MongoDB-Produktionsdatenbank geben (10.000 und 1 Jahr):

Normaler Weg, tägliche Abfragen: 10.001
Jährliche Abfragen: 10.001 x 365 = 3.650.365 Abfragen
Jährliche Kosten: 3.650.365 x 0,001 $ = 3.650,37 USD

Aggregationsweise, tägliche Abfragen: 2
Jährliche Abfragen: 2 x 365 = 730 Abfragen
Jährliche Kosten: 730 x 0,001 $ = 0,73 USD

Ersparnis: 3.650,37 - 0,73 = 3.649,64 USD (fast 4 Lakh Bdt)

Super, schauen Sie sich jetzt den herkömmlichen Abfrageansatz an (der für jeden Benutzer eine Abfrage erstellt)

const resetLimitsForUsers = async () => {
  const users = await User.find({ /* conditions to select users */ });

  for (const user of users) {
    if (user.plan.remaining_prompt_count < 3 || user.plan.remaining_page_count < 3) {
      user.plan.remaining_prompt_count = 3;
      user.plan.total_prompt_count = 3;
      // Save updated plan
      await user.plan.save();
    }
  }
};

Wenn Sie hier 10.000 Benutzer haben, führt dies zu 10.001 Abfragen (1 für jeden Benutzer, plus die anfängliche Abfrage zum Abrufen von Benutzern) – das war riesig.

Jetzt der Heldeneintrag, [der etwas schwierig aussieht, aber eine Menge Geld spart]

const resetPlanCounts = () => {
  cron.schedule('* * * * *', async () => {
    try {
      const twoMinutesAgo = new Date(Date.now() - 2 * 60 * 1000); // 2 minutes ago

      const usersWithRegisteredPlan = await User.aggregate([
        {
          $match: {
            createdAt: { $lte: twoMinutesAgo },
            plan: { $exists: true }
          }
        },
        {
          $lookup: {
            from: 'plans',
            localField: 'plan',
            foreignField: '_id',
            as: 'planDetails'
          }
        },
        {
          $unwind: '$planDetails'
        },
        {
          $match: {
            'planDetails.name': 'Registered',
            $or: [
              { 'planDetails.remaining_prompt_count': { $lt: 3 } },
              { 'planDetails.remaining_page_count': { $lt: 3 } }
            ]
          }
        },
        {
          $project: {
            planId: '$planDetails._id'
          }
        }
      ]);

      const planIds = usersWithRegisteredPlan.map(user => user.planId);

      if (planIds.length > 0) {
        const { modifiedCount } = await Plan.updateMany(
          { _id: { $in: planIds } },
          { $set: { remaining_prompt_count: 3, total_prompt_count: 3, remaining_page_count: 3, total_page_count: 3 } }
        );

        console.log(`${modifiedCount} plans reset for "Registered" users.`);
      } else {
        console.log('No plans to reset for today.');
      }
    } catch (error) {
      console.error('Error resetting plan counts:', error);
    }
  });
};

Auf diese Weise können Sie Ihren Cron-Job ausführen [er wird in einer bestimmten Zeit automatisch ausgeführt], um das Guthaben oder Limit aller 10.000 Benutzer zu aktualisieren, wodurch mehr als 3600 USD pro Jahr eingespart werden können.

AUTOR,
Name: Mahinur Rahman
Kontakt: dev.mahinur.rahman@gmail.com

Das obige ist der detaillierte Inhalt vonDie Kraft der AGGREGATION bei Cron-Jobs und Kosteneffizienz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn