我正在开发一个从/向不同文件读取和写入的 Java 桌面应用程序。我认为更好的解决方案是用 SQLite 数据库替换文件系统。迁移到这个系统并在我的应用程序中嵌入数据库有多难?有真正的性能提升吗?非常感谢
问问题
4196 次
3 回答
7
我认为仅将数据存储更改为 SQLite 不会获得性能。如果是,您应该将基于 FS 的存储迁移到关系 (SQL) 数据库存储。
- 你需要原子操作。- 您的应用随时可能崩溃,您不必担心数据损坏)
- 您需要异步操作。- 您的应用程序的多个实例可以同时修改数据而不会破坏数据/获得无效状态。
- 您需要数据规范化。- 产品 -m2m-> 目录
- 自动索引- 如果您需要快速搜索功能(如果您的文件系统还不够快)
- 您需要抽象复杂的数据操作。- 即 SELECT SUM(Price) WHERE Price < 10 等
这些是您通过切换到 SQLite 获得的一些收益。
如果您还正确地利用了使用基于文件的系统所没有的关系存储的上述一个或多个属性,则可以从 SQLite 获得性能提升。
于 2009-11-05T09:33:04.763 回答
2
我认为你不会在任何标准桌面上获得显着的性能提升——只要你的应用程序没有做任何其他事情,只是通过读写来折磨文件系统:) 最后,性能主要取决于你的代码。
如果您考虑切换到 SQLite,您可能想看看SQLJet,这是 SQLite 的纯 Java 实现。我自己没有使用过,但我认为部署它应该类似于 Derby:你只需要在应用程序中添加一些 Jars 就可以了。我会尽量避免使用外部 SQLite(或任何其他对外部应用程序的依赖),因为它会使应用程序的设置相当复杂。
于 2009-11-05T09:54:05.447 回答
1
将 Derby 嵌入到 Java 桌面应用程序中很简单。您只需将 Derby jar 添加到您的应用程序中,确定要将数据存储在磁盘上的哪个位置,然后编写标准 SQL 和 JDBC 调用来调用 Derby 操作。编写良好的 Derby 应用程序可以提供极高的性能,但您必须注意您的模式和事务设计。Derby 有很好的工具来分析和解决性能问题。
于 2009-11-06T06:22:18.047 回答