1

Need suggestions for a database. I'm tasked to write a C# desktop application for a small business. The business owner does not want his data to be stored on the internet. He has two desktop computers. He would like for each desktop to have a copy of the application, and if one of the desktops suffers a catastrophic hardware failure he wants to be able to boot up the other desktop and continue his work.

I'm looking for a way to persist and share the data used by the application easily across two computers. I'll admit I'm not a network guru or database administration guru. The application will have only one user at a time. The data would probably be estimated at a max of a few hundred MB to a GB. The schema would be very simple, with 4 or 5 tables.

Things I can do: Some basic networking between the two desktops (I'm not sure how but willing to educate myself) Buy some cheap hardware to help facilitate this

Things I can't do: Buy another machine to be a dedicated server

Any suggestions are welcome. Thank you!

8
  • I’m not an expert at this, but I imagine GIT might be applicable. git-scm.com
    – Eric S
    Commented Apr 5, 2019 at 14:37
  • Now that's something I hadn't thought of. Thank you! "Outside of the box" suggestions are awesome!
    – Jamie
    Commented Apr 5, 2019 at 17:20
  • If computer A fails and computer B has been off for months git won't have had an opportunity to sync. You would have to have a GIT server loaded somewhere.
    – cybernard
    Commented Apr 5, 2019 at 18:10
  • @cybernard I’m assuming both computers are always on. It seems a reasonable assumption.
    – Eric S
    Commented Apr 5, 2019 at 22:33
  • 1
    How often must the data be synced? Every keystroke? Every minute? Every hour? Every day? Commented May 6, 2019 at 0:17

3 Answers 3

0

You could use mysql or open source equivalent of mariadb.

Then setup replication..caveat both computer have to be on so replication can happen.

If you want a true turn computer B on when computer A fails then the data has to live on another computer. You can setup a network share or just use native networking like mariadb or etc. You can literally load mariadb most operating system, and the computer it is on can be any computer. Especially with such a tiny database, a user using a PC with mysql on it would never even notice a database running 5 tables running in the background. Unless you start having hundreds of thousands of records.

Somewhere the data lives on a hard drive and that is your key point of failure.

Every other part of the computer doesn't matter! CPU dies replace it. done. RAM dies, replace it done. You can even install a database like mariadb on virtually an windows,mac,linux PC and copy the data over from the dead machines hard drive by connecting it to a new working PC via USB external enclosure. However, if the hard drive fails...game over.

You can reduce the odds in fails by swapping the hard drive for an SSD. Hard drive have moving parts subject to failure and SSD don't. SSD will still eventually fail, but you have eliminate one major factor in hard drive reliability.

Unfortunately the rest of standard practices cost significantly more.

RAID 5/6 can protect against single/dual hard drive failure but require 3/4 hard drives minimum.

You will still need backup with versioning to protect against a virus encrypting your files.

You can even up your game further by making it web based. Then in can be accessed from any PC. You can use the built-in windows firewall to block any IP you don't want accessing the PC. You can load apache,mariadb, and php on windows and then there is nothing to install, except on the server(can be any standard PC). Using a PHP framework like laravel(or any) you can make a beautiful GUI for the client to use. Many frameworks even make it possible to implement username/password logins easily for protection.

0

When your current design, why don't you simply point both the PC to the same data folder (shared folder)? You can use any database here. I would suggest sqlite.

In addition to this, you can backup the data in separate folders (just in case you wish to restore an older version)

0

Why not just Use SQL express, it does not require a separate system, only that the one housing it must be on. It runs very light and is designed just for things like this, + free, it will even install for you with VS Community edition for building projects like this.

Sort of like when you set up multi user quick books, or other network "shared" apps, one is the master, the other communicates with it.

I do it all the time and have for YEARS .

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.