java - 轻量级易于安装的数据库
问题描述
我有一个小型家庭开支应用程序,我在空闲时间用 Java 开发它。既然它是功能性的,我想让它便携,这样我就可以把它传递给朋友(非开发人员)来试用。
我设法对 api 和 web ui 进行了 dockerize,但是 DB 有点棘手。目前我正在使用mysql,安装在我的机器上。但我不希望用户安装和配置数据库。
我需要的是:
- 免费的东西
- 本地(不希望用户担心他们的数据可能被盗)
- 低容量和速度要求。这个数据比较少。
- 便携的。理想情况下无需安装。或者通过不带参数的脚本安装。
- 零维护。我不希望用户检查运行状况或安装补丁。
- 持久性。在内存数据库上,如果压碎会丢失数据是不好的。
- 因为我已经投资了 Spring ORM,所以我更喜欢可以与我现有代码一起使用的东西。
解决方案
基本上你的选择是:
Dockerize 也 mysql 数据库(使用现成的图像)+您可能想使用 docker compose 同时启动数据库和应用程序。如果您的朋友有 docker(这似乎已经是您的应用程序的要求,那么它可能是最简单的方法)。
使用可嵌入到您的应用程序中的另一个数据库。例如:SQLLight、Derby、H2。如果您的查询简单且“足够便携”,这种方法也可以工作,但您至少必须重新检查所有查询,因为有时这些 DB 的行为可能与 MySql 不同。与方法 1 不同,您不需要运行另一个容器,也不会使用 docker-compose,反正这没什么大不了的,因为 docker compose 现在是任何 docker 安装的一部分。
在某个云(如 AWS)中托管数据库并从您的应用程序连接到云。这可能会很慢(应该是这 3 种方法中最慢的方法),但可以让您免于维护数据库的负担。当然,如果您的应用程序的不同副本应该访问不同的数据,则它不会起作用(然后您必须在云中为每个用户维护一个数据库)。这也可能很昂贵,因为您必须向云提供商付费。
最后,我建议您使用解决方案 1,如果您不能使用 2,最糟糕的是解决方案 3 IMO。
推荐阅读
- material-ui - CSS 覆盖不起作用。被组件 CSS 覆盖。怎么修?
- python - y 标签是否需要是特定类型才能使 SVM 工作?
- r - 使用 dplyr 对两个变量进行分组并找到前三个
- python-3.x - Python。Matplotlib。如何将矩阵的轴转换为坐标
- c# - 具有独特属性的 AutoFixture 构建集合
- r - 如何使您的排名值在 R data.table 中显示整数(不带小数)
- java - Hibernate 5.x 中的 HQL 和 Criteria API 有什么区别?
- c++ - 在不同的函数中读取文件的不同部分 - C++
- node.js - Node + Mongo / Mongoose 文本搜索分数不需要完整的整数?是否有可能以另一种方式过滤低分?
- c++ - 将原始指针移动到已创建函数中的下一个字符