<p>I need a database that could be stored network drive and would allow multiple users (up to 20) to use it without any server software.</p>

<p>I'm considering MS Access or Berkeley DB.</p>

<p>Can you share your experience with file databases? <br>
Which one did you use, did you have any problems with it?</p>

[{'answer_id': 35035, 'author': 'svrist', 'author_id': 86, 'author_profile': 'https://Stackoverflow.com/users/86', 'pm_score': 2, 'selected': False, 'text': '<p>Access can be a bitch. Ive been in the position where i had to go around and tell 20-50 people to close access so I could go to "design mode" to change the design of the forms and maybe a column. No fun at all. (Old access, and it might just be a bad setup)</p>\n'}, {'answer_id': 35051, 'author': 'Daniel Jennings', 'author_id': 3641, 'author_profile': 'https://Stackoverflow.com/users/3641', 'pm_score': 4, 'selected': True, 'text': '<p>I would suggest <a href="http://www.sqlite.org/index.html" rel="noreferrer">SQLite</a> because the entire database is stored in a single file, and it quite safely handles multiple users accessing it at the same time. There are several different libraries that you can use for your client application and there is no server software needed.</p>\n\n<p>One of the strengths is that it mimics SQL servers so closely that if you need to convert from using a database file to a full-fledged SQL Server, most of your queries in your client won\'t need to change. You\'ll just need to migrate the data over to the new server database (which I wouldn\'t be surprised if there are programs to convert SQLite databases to MySQL databases, for example.)</p>\n'}, {'answer_id': 35063, 'author': 'Neall', 'author_id': 619, 'author_profile': 'https://Stackoverflow.com/users/619', 'pm_score': 3, 'selected': False, 'text': "<p>I really don't think that file-based databases can scale past half a dozen users. The last time I had an Access database (admittedly this was quite a while ago) I had to work really hard to get it to work for 8-9 people.</p>\n\n<p>It is really much easier to install Ubuntu on an old junk computer with PostgreSQL or MySQL. That's what I had to do even when I kept my Access front-end.</p>\n"}, {'answer_id': 35067, 'author': 'Ryan Duffield', 'author_id': 2696, 'author_profile': 'https://Stackoverflow.com/users/2696', 'pm_score': 2, 'selected': False, 'text': '<p><a href="http://www.ayende.com/Blog/Default.aspx" rel="nofollow noreferrer">Ayende</a> was recently trying to make a similar decision, and tried a bunch of so-called embedded databases.  Hopefully his <a href="http://www.ayende.com/Blog/archive/2008/07/11/Observations-on-Embedded-databases.aspx" rel="nofollow noreferrer">observations</a> can help you.</p>\n'}, {'answer_id': 36124, 'author': 'Fionnuala', 'author_id': 2548, 'author_profile': 'https://Stackoverflow.com/users/2548', 'pm_score': 1, 'selected': False, 'text': '<p>I have been using Access for some time and in a variety of situations, including on-line. I have found that Access works well if it is properly set up according to the <a href="http://msdn.microsoft.com/en-us/library/aa167840.aspx" rel="nofollow noreferrer">guidelines</a>. One advantage of Access is that it includes everything in one package: Forms, Query Building, Reports, Database Management, and VBA. In addition, it works well with all other Office applications. The Access 2007 runtime can be obtained free from <a href="http://www.microsoft.com/downloads/details.aspx?familyid=d9ae78d9-9dc6-4b38-9fa6-2c745a175aed&amp;displaylang=en" rel="nofollow noreferrer">here</a>, which makes distribution less expensive. Access is certainly unsuitable for large operations, but it should be quite suitable for twenty users. EDIT: <a href="http://office.microsoft.com/en-us/access/HP051868081033.aspx" rel="nofollow noreferrer">Microsoft</a> puts the number of concurrent users at 255.</p>\n'}, {'answer_id': 39032, 'author': 'jason saldo', 'author_id': 1293, 'author_profile': 'https://Stackoverflow.com/users/1293', 'pm_score': 3, 'selected': False, 'text': '<p>Beware of any file based database, they are all likely to have the same problems.  Your situation really calls for a Client/Server solution. </p>\n\n<p>From SQLite FAQ</p>\n\n<blockquote>\n  <p>A good rule of thumb is that you\n  should avoid using SQLite in\n  situations where the same database\n  will be accessed simultaneously from\n  many computers over a network\n  filesystem.</p>\n</blockquote>\n\n<p><a href="http://www.sqlite.org/whentouse.html" rel="noreferrer">http://www.sqlite.org/whentouse.html</a></p>\n'}, {'answer_id': 67313, 'author': 'David-W-Fenton', 'author_id': 9787, 'author_profile': 'https://Stackoverflow.com/users/9787', 'pm_score': 1, 'selected': False, 'text': '<p>The original question makes no sense to me, in that the options don\'t belong together. BerkeleyDB is a database engine only, while Access is an application development tool that ships with a default file-based (i.e., non-server) database engine (Jet). By virtue of putting Access with Berkeley, it seems obvious that what is needed is <em>only</em> a database engine, and no application at all, but how end users use Berkeley DB without a front end, I don\'t know (I\'ve only used it from the command line).</p>\n\n<p>Those who cannot run a Jet MDB with 20 simultaneous users are simply not competent to be giving advice on using Jet as a data store. It is completely doable as long as best practices are followed. I would recommend in addition to Microsoft\'s Best Practices web page, <a href="http://www.granite.ab.ca/access/bestpractices.htm" rel="nofollow noreferrer">Tony Toews\'s Best Practices</a>, and <a href="http://www.granite.ab.ca/access/corruptmdbs.htm" rel="nofollow noreferrer">Tony\'s Corruption FAQ</a> (i.e., things you want to avoid doing in order to have a stable application).</p>\n\n<p>I strongly doubt that the original questioner is building no front end application, but since he doesn\'t indicate what kind of front end is involved, it\'s hard to recommend a back end that will go with it. Access has the advantage of giving you both parts of the equation, and when used properly, is perfectly reliable for multiple users.</p>\n'}, {'answer_id': 77202, 'author': 'user13550', 'author_id': 13550, 'author_profile': 'https://Stackoverflow.com/users/13550', 'pm_score': 1, 'selected': False, 'text': '<p>Can Access be set up to support 10-20 users?  Yes.  It, as well as all file-based databases use the file system for locking and concurrency control, however.  And, Access data files are more susceptible to database corruption than are database servers.  And, while you can set it up for this, you MUST, as David Fenton mentions above, follow best practices, if you want to end up with a reliable system.</p>\n\n<p>Personally, I find that, given the hoops that you need to jump through to ensure that an Access solution is reasonably trouble-free, it is much less trouble to implement an instance of MSDE/SQL Server Express, or postgreSql. </p>\n'}, {'answer_id': 199088, 'author': 'yoav.aviram', 'author_id': 25287, 'author_profile': 'https://Stackoverflow.com/users/25287', 'pm_score': 1, 'selected': False, 'text': '<p>Berkeley DB supports a high degree of concurrency (far more then 20), but it does so primarily by utilizing shared memory and mutexes (possibly even replication) - facilities that do not work well when BDB is deployed as a <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/remote.html" rel="nofollow noreferrer">file stored on a network drive</a>.</p>\n\n<p>In order to take advantage of DBD concurrency capabilities you will have to build an application around it.</p>\n'}]
['https://Stackoverflow.com/questions/35017', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1534/']