m4_comment([$Id: need.so,v 10.2 2000/12/08 23:59:06 mao Exp $]) m4_ref_title(Introduction, Do you need m4_db?,, intro/dbisnot, intro/what) m4_p([dnl m4_db is an ideal database system for applications that need fast, scalable, and reliable embedded database management. For applications that need different services, however, it can be a poor choice.]) m4_p([dnl First, do you need the ability to access your data in ways you cannot predict in advance? If your users want to be able to enter SQL queries to perform complicated searches that you cannot program into your application to begin with, then you should consider a relational engine instead. m4_db requires a programmer to write code in order to run a new kind of query.]) m4_p([dnl On the other hand, if you can predict your data access patterns up front -- and in particular if you need fairly simple key/value lookups -- then m4_db is a good choice. The queries can be coded up once, and will then run very quickly because there is no SQL to parse and execute.]) m4_p([dnl Second, are there political arguments for or against a standalone relational server? If you're building an application for your own use and have a relational system installed with administrative support already, it may be simpler to use that than to build and learn m4_db. On the other hand, if you'll be shipping many copies of your application to customers, and don't want your customers to have to buy, install, and manage a separate database system, then m4_db may be a better choice.]) m4_p([dnl Third, are there any technical advantages to an embedded database? If you're building an application that will run unattended for long periods of time, or for end users who are not sophisticated administrators, then a separate server process may be too big a burden. It will require separate installation and management, and if it creates new ways for the application to fail, or new complexities to master in the field, then m4_db may be a better choice.]) m4_p([dnl The fundamental question is, how closely do your requirements match the m4_db design? m4_db was conceived and built to provide fast, reliable, transaction-protected record storage. The library itself was never intended to provide interactive query support, graphical reporting tools, or similar services that some other database systems provide. We have tried always to err on the side of minimalism and simplicity. By keeping the library small and simple, we create fewer opportunities for bugs to creep in, and we guarantee that the database system stays fast, because there is very little code to execute. If your application needs that set of features, then m4_db is almost certainly the best choice for you.]) m4_page_footer