I'm desiging a high performance system with the main function is to update a product inventory. Each product has an unique product id, and we can add/substract number of items of that product in the investory. To improve the performace, I don't want to hit the database for every single add/substract request but do it in an application server's memory and then periodically update the database. However that approach has a tradeoff that if the application server dies then I will lost all the temporary data. How could I improve the system to overcome it?
Fault tolerant solution for in memory aggregation before writing to database
52 Views Asked by Ast15 At
1
There are 1 best solutions below
Related Questions in DATABASE
- How to add the dynamic new rows from my registration form in my database?
- How to store a date/time in sqlite (or something similar to a date)
- Problem with add new attribute in table with BOTO3 on python
- When an E-R attribute should be perceived as a relationship attribute or as an entity set attribute?
- SQLAlchemy: efficient relationship loading in 3-way many-to-many relationship
- Cannot connect to Postgres Database when running Quarkus Tests with Gitlab ci
- Local or remote database with react-native?
- I want to edit a specific row in database
- How to enter data in mongodb array at specific position such that if there is only 2 data in array and I want to insert at 5, then rest data is null
- Open Web Library
- database login.py and register.py error showing 404 file not found and doesn't work
- SQL71561: SqlComputedColumn: When column selected
- Liquibase as SaaS To Configure Multiple Database as Dynamic
- Updated max input vars but table still shows error
- Spring does not map set of roles
Related Questions in CACHING
- Using Puppeteer to scrape a public API only when the data changes
- Caching private wordpress rest endpoints
- Cloudflare not respecting Cache-Control
- Unexpected Recursive Call
- Cannot serialize (Spring Boot)
- Nginx only caches file endpoints
- The Selenium application properties folder holds two environment options. After running a test the environment setting changes to a previous setting
- Launch jobs in cache in a loop in bash script
- Multiple async request do not store anything to cache
- Dev tool for Next.js cache on the client?
- Creating a letter in the terminal by entering
- Laravel: check if cache has key with thag
- The retrieval time for the Apache Ignite cache is too long
- How to run gradle with caches files
- Docker Run cache mount does not cache apt-get dependencies
Related Questions in MEMORY
- 9 Digit Addresses in Hexadecimal System in MacOS
- Memory location changing from 0 to 1 consistently on Mac
- Would event listeners prevent garbage collecting objects referenced in outer function scopes?
- tensorrt inference problem: CPU memory leak
- How to estimate the memory size of a binary voxelized geometry?
- Java Memory UTF-16 Vs UTF-8
- Spring Boot application container memory footprint (Java 21)
- Low memory Windows CE
- How to throw an error when a program acesses a block of memory created by you that has been deallocated by a call of free?
- Golang bufio.Scanner: token too long
- Get the address and size of a loaded shared object on memory from C
- In Redis Databases how do we need to calculate the table size
- ClickHouse Materialized View consuming a lot of Memory and CPU
- How to reduce memory usage for large matrix calculations?
- How to use memray with Gunicorn or flask dev server?
Related Questions in FAULT-TOLERANCE
- why Java BigDecimal giving Precision Errors
- Ensuring Sub-5 Second Failover in Highly Consistent Database Architecture on AWS
- R: Applying function to single value in data.table 1 and comparing resulting individual values in vector with single values in data.table 2
- Fault tolerant USB HID communication
- Specified Quarkus' timeout doesn't always work as expected
- Rate Limiting and Pricing in Distributed Systems
- Killing Supervised process in Phoenix Framework causes the entire application to shutdown
- why some Fault Tolerance settings in Azure Data Factory are disabled?
- Setting up nginx for fault tolerance
- How to start Flink application from last snapshot-id in DB streaming when application was stopped
- How to handling completion of multiple asynchronous messages and ensuring exactly-once semantic in Flink Statefun
- How to override an interface fault tolerance annotation in application.properties
- What is this default tolerance value for Binary (as well as other types of) variables in CPLEX?
- Logging Microprofile fault tollerance events
- Simulating node failure for testing purposes
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 # Hahtags
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?
If you want transactional consistency, you'll need to hit the database.
Otherwise, don't write to memory. Write a request log to disk (persistent storage). After a period of time, compact those logs and compute the aggregate request to send to the database.
Keep in mind, that if you distribute this process, and have other validation such as "database amount cannot be negative at any time", then it's possible you may emit several subtraction events at the same time, and then invalidate your requirements.