2011-07-23 39 views
0

我正在为我的需要指定的Java服务器应用程序的规划阶段。Java服务器应用程序数据库选项

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

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

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

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

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

谢谢。 Mike。

回答

5

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

  1. 服务器是否需要缩放/ - 还能有比一个节点吗?如果是这样,一个文本文件不会削减它,因为你的节点可能很容易与对方不同步,因为发生了变化。

  2. 将来有必要存储其他类型的数据吗?关系数据库在添加新字段和关系方面可以非常灵活。一个文本文件不是很多。

  3. 你需要什么样的可靠性?应用程序是否需要能够从突然的服务器关闭,数据库文件的文件系统损坏,硬盘的物理故障等事件中恢复?是否应该定期备份?大多数数据库都有解决这些问题的合理方案但是同样是一个文本文件,不是很多。

  4. 您希望得到多少数据?在服务器启动时将所有内容加载到内存缓存中都可以正常工作,直到您遇到过多数据无法放入内存为止。一旦发生这种情况,您将不得不想出一些解决方案来手动搜索文本文件中的条目,而无需将全部内容加载到内存中。虽然你当然可以这么做,但这正是数据库软件设计和优化的问题。

  5. 多少并发性和稳健性的事么?如果变化是来自不同线程的同时进行的文本文件和在存储器映射可以很容易被损坏(如在一个Web应用程序是典型值)。你可以通过同步任何修改状态的东西来解决这个问题,但是这会带来性能影响。大多数数据库的概念,如事务更新和参照完整性有助于确保国家始终是一致的,并始终保持,即使是在多并发更新的面貌。

因此,使用一个文本文件,并在内存中的地图是不是行不通的方案,只要你有信心,你只需要一个单一的服务器实例,您的数据模型将不需要显著改过来时间,并且你的数据文件不会变得太大而不适合内存。否则,你应该选择一个数据库提供商并与其一起使用。

Java有可用于几乎所有流行的RDBMS连接器,这样你就可以很容易地挂钩的MySQL,或Postgres的,或Oracle,甚至像MongoDB的非关系型数据存储。就我个人而言,我会推荐MySQL,因为它很容易设置和相当简单的使用。当然,它比Oracle更平易近人。

+0

真的很感谢你把写这个的时候。一个文本文件可以满足我的需求,但我担心文件损坏或性能,如果同步。我想我会试试MySQL。 –

+0

3小时后试图在Windows 7机器上安装MySQL,我的结论是,除非你得到的第一次尝试正确的它几乎是不可能的。无数的互联网搜刮和啧啧没有帮助。现在就试试postgresql。 –

1

对于你想做的任何数据库是好的。

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

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

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

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

相关问题