Reputation: 95
I am developing a C# application and want to be sure I choose the best choice for data storage that fits these specs.
The program can have a infinite amount of data, but that data will only be used by a single user that is using the application. Each time the application is closed, I need to save the data, and it needs to be loaded in when the application is started.
I have looked at databases, but am unsure as to which would be best suited for my needs. Also, I wonder if I need a database at all given the above specs, maybe I should just use a binary file/XML file implementing serialization and deserialization.
Point me in the right direction please!
Thanks, OC
EDIT: One important factor I forgot to include is the necessity to allow one user to save all the entries he/she entered and export it to an external file that can be easily shared between applications/users.
Upvotes: 3
Views: 2099
Reputation: 1027
If you implement your storage functions in a repository 1) 2) , you can start with storing to files, and then moving to a database storage if you later identify a need to do so
1) http://martinfowler.com/eaaCatalog/repository.html
2) https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx
Upvotes: 1
Reputation: 131806
Without knowing more about what your specific application does, it's hard (for us) to say whether a database is the right choice. However, there are some rules of thumb that you can use to help steer your decision.
A database may be a good choice when:
A database may not be the best choice when:
These are all rules of thumb ... no single condition is going to dictate whether to use a database or not. You must examine all of the considerations, and decide whether using a database will give you sufficient benefit - or not.
In many environments, (such as iPhone, for example) there is a built-in database layer available directly on the platform. There are also tools (like NSCoreData) which help you overcome the Object-Relational Modeling (ORM) impedence mismatch. In such cases, it may make a lot of sense to use a database ever for very simple data storage.
There are also a number of open source data persistence layers (NHiberante, DB4O, and others) that help simplify using a database as a persistence store ... which, if you can use them, can shift the equation in favor of using a database.
A database can substantially simplify the development of your application when you need to support queries or search functionality. Relational databases support a query language (SQL), which moves the effort of identifying and retrieving results from the database much easier. Letting the database do the heavy lifting can be a significant time saver - as databases are specifically designed to perform query operations correctly and efficiently. However, this comes at the cost of a well-designed relational data structure - which you must create.
One significant consideration, is whether users will share the data that they create/consume using your application. If your application is more document oriented (think Word, Excel, Powerpoint), then a file-based serialization model may be more appropriate. If your application's data will not be shared - then a database may make sense.
Another significant factor is how open you want your data to be. Databases store information in well-defined structures (tables), and this makes it easier for you (and your users) to directly access and inspect the data. Storage formats like XML, also allow this, but to a somewhat lesser extent.
Upvotes: 6
Reputation: 86585
A full-blown client/server database like MySQL or SQL Server would probably be overkill for a single user. But you'd probably get some use from an embedded/file-based engine like SQLite or SQL Server CE, especially if you want to do more with the data than just look up single records by ID. If you did the data storage yourself, you'd have to write loads of code to get records meeting certain criteria, and i all but guarantee you won't do as well at it as the people who do it for a living.
Upvotes: 4
Reputation: 2638
Personally for me its more about the data than the number of users using an application.
Think about your data, is it complex? If you were to actually create a database how big would it be in terms of objects, not the amount of rows... how many tables etc...
Think about the future, although its only one user, the data is still going to increase I presume, and how much data will be saved each time?
The database approach will speed up your development no doubt - and your data will have better integrity than an XML file. I hate using files personally... I've had experiences in the past where data has gone missing etc from the file.
Remember, there is always SQL Compact Edition should you want to keep your resources limited.
Upvotes: 2