Java服务器应用程序数据库选

时间:2011-07-23 12:18:42

标签: java database options

我正处于为我的需求指定的java服务器应用程序的规划阶段。

基本上,服务器需要使用用户名和密码以及每个用户的一些指定值来检查数据库。

由于我是java服务器应用程序的新手,我想知道它的理想选择是什么。

当服务器应用程序关闭并在以后恢复时,需要能够保存数据库。

我一直在考虑的一个选项就是将.txt文件作为数据库,在服务器启动时,创建一个HashMap或其他东西,并使用存储在该文件中的数据。这使得它可读(导致.txt文件),我听说HashMaps是性能的绝佳选择。

我读过HSQLDB,但我不确定如何使用它。

感谢。 麦克

2 个答案:

答案 0 :(得分:5)

没有一个答案,以及可能/应该影响您决定的一些考虑事项:

  1. 服务器是否需要扩展/是否会有多个节点?如果是这样,文本文件就不会削减它,因为在进行更改时,您的节点很容易彼此不同步。

  2. 将来是否有必要存储其他类型的数据?关于添加新字段和关系,关系数据库可以非常灵活。文本文件不是那么多。

  3. 您需要什么样的可靠性?应用程序是否需要能够从服务器突然关闭,数据库文件的文件系统损坏,HDD的物理故障等等中恢复?应该创建定期备份吗?大多数数据库都有针对这些问但又是一个文本文件,而不是。

  4. 您期望获得多少数据?在服务器启动时将所有内容加载到内存缓存中可以正常工作,直到您达到数据太多以适应内存的程度。一旦发生这种情况,您将不得不想出一些解决方案来手动搜索文本文件中的条目,而无需将整个内容加载到内存中。虽然你当然可以做到这一点,但这正是数据库软件的设计和优化问题。

  5. 您想要多少并发性和健壮性?如果同时从不同的线程进行更改(如Web应用程序中的典型情况),则文本文件和内存映射很容易被破坏。您可以通过同步修改状态的任何内容来解决这个问题,但这会带来性能影响。大多数数据库都具有事务更新和参照完整性等概念,这有助于确保状态始终保持一致且始终如一,即使面对多个并发更新也是如此。

  6. 因此,如果您确信只需要一个服务器实例,那么使用文本文件和内存映射并不是一个不可行的解决方案,您的数据模型不需要随时间发生显着变化,您的数据文件不会太大而无法放入内存中。否则你应该选择一个数据库提供者并继续使用它。

    Java几乎可以为每个流行的RDBMS提供连接器,因此您可以轻松连接MySQL,Postgres或Oracle,甚至是MongoDB等非关系型数据存储。我个人会推荐MySQL,因为它易于设置,使用起来相当简单。当然,它比甲骨文更容易接近。

答案 1 :(得分:1)

您想要做什么,任何数据库都可以。

MySQL,PostgreSQL,或者,如果在Windows上,SQL Server都是不错的选择。

如果你想要进程中的东西你可以选择hsql,或者也许是Derby。进程内数据库的缺点是您需要确保干净停止(没有KILL),并且在运行时无法调查数据库的内容。

大多数进程内数据库也可以作为独立服务器运行,在这种情况下,您可以像访问其他数据库一样访问它们。

至于推荐,我想我推荐MySQL,因为它似乎有一些很好的初学者工具。但所有这些都是可行的选择。