Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 774537
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T19:08:50+00:00 2026-05-14T19:08:50+00:00

I have the following problem: Our system has products that when released only are

  • 0

I have the following problem:

Our system has products that when released only are allowed to be purchased X times. Upon purchase a central purchasing algorithm checks how many Orders exist and if below X proceeds with the purchase.

In pseudoish C# code:

public class OrderMethods
{

    public static Purchase(Product product, Client client)
    {

        int purchases = /* count order records of this product */;

        if(purchases>=MAX_ORDERS) throw PurchaseException();

        /* perform purchase by inserting order record in database */

     }

}

The problem is that sometimes when there’s a high demand for a certain product a lot of request happen at the same time and more than MAX_ORDERS are registered. This happens about once a year :(.

What’s the best solution for solving this? I’m using ASP.NET/C#, Ling2SQL and MSSQL. We have 1000> orders per day. It’s important that orders are processed in the order they are requested.

The solutions I’ve comeup with so far:

  • One global mutex?

  • One mutex per product stored in a hashtable with an access function like:

    private Mutex GetPurchaseMutex(Guid productId)
    {
    
    if (mutexTbl[productId] == null)
        {
            mutexTbl[productId] = new Mutex();
        }
        return (Mutex)mutexTbl[productId];
    }
    

Where mutexTbl is an Hashtable. Here I haven’t figure out how discard old mutexes in a nice way though.

  • Using a T-SQL INSERT Trigger on the Order table that checks how many orders there are:

    CREATE TRIGGER Triggers_OrderInsertTrigger ON Orders
    AFTER INSERT
    AS
    IF /* check if there’s to many orders */ BEGIN
    RAISERROR (‘Too many orders’, 16, 1);
    ROLLBACK TRANSACTION;
    RETURN
    END;

But I’m not so fond of either of these solutions. How would you solve this?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T19:08:50+00:00Added an answer on May 14, 2026 at 7:08 pm

    I’d say move this logic to the database layer when it can be secured with transactions.

    Check for the number of placed offers and if okay place a new order within the same transaction. During this time the new requests will have their transactions (querying the number of placed orders) halted until the first is finished.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    
    BEGIN TRANSACTION
    
    DECLARE @OrderCount int
    SELECT @OrderCount = COUNT (ID) FROM [Order] WHERE ProductID = '234323'
    
    IF (@OrderCount < @Threshold)
    BEGIN
        INSERT INTO [Order] (ID, ProductID, ...)
        VALUES (NEWID(), '234323', ...)
    
        COMMIT TRANSACTION
        RETURN 0
    END
    ELSE
        ROLLBACK TRANSACTION
        RETURN 1
    END
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.