I have a case, where I should limit rows per user in the table. Now I am doing this via COUNT * FROM table check before insert, and if the count equals/more than allowed, I throw an error. COUNT and INSERT query running in the single transaction.
But, on 5000 online users and 50K requests per minute, I have extra records (more than limit) in the table. Looks like a race condition on parallel inserts. How can I avoid this? Can anyone suggest some best practices?
Concurrent inserts and race condition in MySQL
1.9k Views Asked by LONGMAN At
2
There are 2 best solutions below
0
mroman
On
The issue is called Phantom read. Typically it can be resolved by using Serializable isolation level of transaction:
https://en.wikipedia.org/wiki/Isolation_(database_systems)
But it can decrease performance. So if you have a lot of inserts than try other options from comments too.
Related Questions in MYSQL
- MySQL Select Rank
- When dealing with databases, does adding a different table when we can use a simple hash a good thing?
- Push mysql database script to server using git
- Why does mysql stop using indexes when date ranges are added to the query?
- Google Maps API Re-size
- store numpy array in mysql
- Whats wrong with this query? Using ands
- MySQL-Auto increment
- show duplicate values subquery mysql
- Java Web Application Query Is Not Working
- microsoft odbc driver manager data source name not found and no default driver specified
- Setting foreign key in phpMyAdmin
- No responses from google places text search api
- Adding to MAMP database in SQL/PHP
- I want to remove certain parent- and child-divs in all my wordpress posts with php or some other script
Related Questions in CONCURRENCY
- Entity Framework Code First with Fluent API Concurrency `DbUpdateConcurrencyException` Not Raising
- How to return blocking queue to the right object?
- How to ensure data synchronization across threads within a "safe" area (e.g not in a critical section) without locking everything
- Breakpoint "concurrency" in Intellij
- java, when (and for how long) can a thread cache the value of a non-volatile variable?
- Reentrancy and Reentrant in C?
- How to do many simultaneous jsoup sessions (Spring boot project and concurrancy)
- Using multiple threads to print statements sequentially
- Interrupting long working thread
- Usage of C++11 std::unique_lock<std::mutex> lk(myMutex); not really clear
- Using getOrElseUpdate of TrieMap in Scala
- Concurrency of JPA when same DB used by other applications
- erlang processes and message passing architecture
- Erratic StampedLock.unlock(long) behaviour?
- Jersey Client, memory leak, static and concurrency
Related Questions in INSERT
- Cell comparison and row inserts
- Insert element into nested array in Mongodb
- If numeric then Insert numeric else Insert non-numeric
- Bulk insert performance in MongoDB for large collections
- insert data from 3 tables with the same fields into 1 table
- How to insert N rows of default values into a table
- SQLite INSERT with SELECT
- Postgres INSERT from Source (2 columns) into Target (3 columns)
- check if database row is empty
- Form data not inserting in Wordpress database even though hard coded data gets inserted
- Inserting data into mysql DB with cakePHP
- oracle insert into column using subquery
- Android database store same name in database issue
- How to insert/edit records in Yii2 GridView, similar to ASP.Net
- Stored Procedure not giving expected results in Insert query
Related Questions in RACE-CONDITION
- Can RPUSH and LPUSH in Redis race?
- DOM Manipulation not executing instantly
- Security implications of a socket race when tunnelling a sub-command
- Is ajaxComplete() guaranteed to run after any DOM updates?
- Java ConcurrentHashMap and synchronization
- Hidden threads in Javascript/Node that never execute user code: is it possible, and if so could it lead to an arcane possibility for a race condition?
- Solving A Race Condition When Using find_or_create_by
- Is there a way to prevent two Python programs from executing the same binary at the same time?
- Avoid Race Condition in Transaction
- Will process lost wake-up chance in a preemptive kernel?
- ln fails when trying to manully trigger race conditoin
- Race condition explanation in Postgres UPDATE FROM SELECT statment
- Does the existence of a race condition in the code imply the existence of an execution sequence that will result in a deadlock?
- Golang race with sync.Mutex on map[string]int
- Why doesn't the pthread condition variable work
Related Questions in HIGH-LOAD
- How to scale http requests horizontally?
- Building a high-load database on Java + MySQL
- How to process multiple requests using the same PHP running instance?
- Erlang high volume logging
- Storing huge randomized list of similar items in Redis
- Better Practice: Placing the load on SQL or Web server?
- Netty not closing channels normaly
- Java-mysql highload application crash
- How to select rows only from n first rows by condition in mysql
- High load: real-time get SQL message and send it to the Kafka broker. What architectural pattern is suitable here?
- The most reliable way to download data over HTTP
- High loads causing node to become NotReady?
- Cassandra have slow(rpc timeout) read request with long IN operator
- MySql slow data fetching
- How to choose NoSQL database engine?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Use a separate table which will maintain the user and the count of rows inserted. Use the userid as foreign key to the main table. Now if you have a session based application you can load the data into the session or memory and keep fetching it / updating the count after every insert in the session / memory and the database and then actually inserting into the main table.