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

Mik*_*aye 0 java database options

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

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

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

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

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

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

谢谢.麦克风.

aro*_*oth 5

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

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

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

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

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

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

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

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