>  기사  >  웹 프론트엔드  >  크론 작업 및 비용 효율성에서 집계의 힘

크론 작업 및 비용 효율성에서 집계의 힘

Patricia Arquette
Patricia Arquette원래의
2024-09-24 06:16:06781검색

The Power of AGGREGATION in Cron Jobs and Cost-Effectiveness

내가 발견한 SaaS 제품을 작업하는 동안 10,000명의 사용자의 경우 크레딧을 재설정하거나 무료 프롬프트를 받으려면 일반 DB 쿼리와 함께 매일 10,001개의 쿼리가 필요합니다. 스마트 집계를 사용하면 사용자가 10,000명이든 100,000명이든 관계없이 2개의 쿼리만 필요합니다!

먼저 MongoDB 프로덕션 데이터베이스에 대한 비용 검토를 제공하겠습니다(10,000 및 1년):

일반적인 일일 검색어: 10,001
연간 쿼리: 10,001 x 365 = 3,650,365 쿼리
연간 비용: 3,650,365 x $0.001 = 3,650.37 USD

집계 방식, 일일 쿼리 수: 2
연간 쿼리: 2 x 365 = 730개 쿼리
연간 비용: 730 x $0.001 = 0.73 USD

절감액: 3,650.37 - 0.73 = 3,649.64 USD(거의 4 lakh bdt)

멋지네요. 이제 전통적인 쿼리 접근 방식을 살펴보세요(각 사용자에 대해 하나의 쿼리를 만듭니다)

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();
    }
  }
};

여기서 사용자가 10,000명이라면 10,001개의 쿼리가 발생합니다(각 사용자당 1개 + 사용자를 가져오기 위한 초기 쿼리). 엄청난 양입니다..

이제 영웅 항목이 있습니다. [좀 어려워 보이지만 엄청난 돈을 절약할 수 있습니다]

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);
    }
  });
};

이것이 바로 10,000명의 사용자 크레딧이나 한도를 모두 업데이트하기 위해 크론 작업[특정 시간에 자동으로 실행]을 실행하여 연간 3,600달러 이상을 절약할 수 있는 방법입니다.

작가님,
이름: 마히누르 라만
연락처: dev.mahinur.rahman@gmail.com

위 내용은 크론 작업 및 비용 효율성에서 집계의 힘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.