How to manage application data while the application is running? (frequent IO versus more memory usage)

109 views Asked by At

I have a general question about desktop applications. My friend and I were discussing about how application data should be managed while the application is running. We were arguing over two methods and couldn't come to a conclusion. Those two methods were:

  1. Read data when it is needed, write data to the disk as soon as it gets changed.
  2. Load all application data into memory when the application starts, modify it in memory, and finally write onto the disk when the application closes.

As far as I understand, the main arguments are:

  1. #2 is faster because all data is in memory and can be accessed quickly.
  2. #2 is better because it uses minimal file IO, which is, in my knowledge, considered to be a slow and expensive operation.
  3. #1 is better because all data is synchronized at all times with the disk, so there is limited chance of data loss on abnormal program termination.
  4. #1 is better since the application then does not take up much memory.

EDIT: The specific application we were discussing was a Course Management System which involved 4 main aspects: an administrator, teachers, courses and students. Data for all the things above was stored in files on disk. Basically the application was largely data-driven.

2

There are 2 answers

1
Eugene Mayevski 'Callback On BEST ANSWER

Keep the data in memory where possible / desired (if your application works with only part of the data, then loading the unused parts would be waste of RAM), and write/flush the changes a soon as they are changed (or asynchronously in background thread after some delay of inactivity).

If the platform you are working with supports memory-mapped files, look at them. MMFs let you combine both approaches quite efficiently.

0
Vivek Goel On

For me 2 is better. There is general rule that less I/O call = Fast program.

But we can't load everything in memory.

Answer of this question depends on application to application and condition to condition.

Better if you can provide more details.