保存在 java 桌面应用程序和网站上使用的个人用户设置的最佳方式
Best way to save personal user settings who are used on java desktop application app and website
我正在创建一个应用程序,我将所有用户设置存储到 MySQL 服务器中。但是现在当 tableOption3 = id25 然后用户主题是红色时我得到了一些东西。我已经有 5 个这样的表。而且它会变得更大。用户可以使用保存网站和 java 应用程序个人设置的移动应用程序,反之亦然。
我还有其他选择吗?
我一直想知道如果加载 100 个个人选项会发生什么。用户会不会在加载速度上注意到这一点。
您必须将这些个人用户设置保存在某个地方,并且您将始终希望使用某种数据存储,例如:SQL databases
、NOSQL
、平面文件。
我认为 SQL 数据库通常是可行的,拥有超过 100 个个人选项不应该过多地降低性能。
但我的建议是避免有多张桌子。您可以达到预期的效果,为所有用户存储所有属性,方法是 just one table
,即:
USER_ID | PROPERTY | PROPERTY_VALUE
1 | COLOR | RED
2 | COLOR | BLUE
1 | FONT_SIZE| 12
2 | FONT_SIZE| 14
etc
如果您正在寻找 Java 的直接解决方案,您可以尝试 jsup,这是一个 java 库,用于在 [=] 中存储和获取简单的用户首选项26=] 数据库。
我是jsup作者,写了很多小applications/tools。我经常发现需要支持用户偏好,但找不到适合不同 SQL 数据库的库,所以我继续创建了 jsup。
它适用于各种常见的 SQL 数据库类型,并且易于上手:
Injector injector = Guice.createInjector(
new AbstractModule() {
@Override
protected void configure() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:h2:mem:testdb");
HikariDataSource dataSource = new HikariDataSource(config);
// Be sure to specify the correct dialect.
bind(Key.get(SQLDialect.class, UserPreferencesModule.UserPreferences.class)).toInstance(SQLDialect.H2);
bind(Key.get(DataSource.class, UserPreferencesModule.UserPreferences.class)).toInstance(dataSource);
}
},
new UserPreferencesModule());
UserPreferencesDb userPreferencesDb = injector.getInstance(UserPreferencesDb.class);
UserPreferencesAnalytics userPreferencesAnalytics = injector.getInstance(UserPreferencesAnalytics.class);
userPreferencesDb.setString("some-user", "ui", "theme", "default");
userPreferencesDb.setString("some-user", "ui", "display.timestamp.timezone", "UTC");
userPreferencesDb.addToSet("some-user", "app", "favorite.projects", ImmutableSet.of("prj1", "prj2"));
userPreferencesDb.setBoolean("some-user", "app", "email.on.failure", true);
System.out.println(userPreferencesDb.getString("some-user", "ui", "theme"));
System.out.println(userPreferencesDb.getString("some-user", "ui", "display.timestamp.timezone"));
System.out.println(userPreferencesDb.getSet("some-user", "app", "favorite.projects"));
System.out.println(userPreferencesDb.getBoolean("some-user", "app", "email.on.failure"));
System.out.println(userPreferencesAnalytics.getStringCategories());
System.out.println(userPreferencesAnalytics.getBooleanPreferencesByUser("app", "email.on.failure"));
除了用于存储和获取首选项的数据库界面之外,还有一个用于获取统计信息或更容易与其他工具集成的分析界面。
GitHub 页面上有示例和更多文档。如果有什么想补充的请开工单
我正在创建一个应用程序,我将所有用户设置存储到 MySQL 服务器中。但是现在当 tableOption3 = id25 然后用户主题是红色时我得到了一些东西。我已经有 5 个这样的表。而且它会变得更大。用户可以使用保存网站和 java 应用程序个人设置的移动应用程序,反之亦然。
我还有其他选择吗? 我一直想知道如果加载 100 个个人选项会发生什么。用户会不会在加载速度上注意到这一点。
您必须将这些个人用户设置保存在某个地方,并且您将始终希望使用某种数据存储,例如:SQL databases
、NOSQL
、平面文件。
我认为 SQL 数据库通常是可行的,拥有超过 100 个个人选项不应该过多地降低性能。
但我的建议是避免有多张桌子。您可以达到预期的效果,为所有用户存储所有属性,方法是 just one table
,即:
USER_ID | PROPERTY | PROPERTY_VALUE
1 | COLOR | RED
2 | COLOR | BLUE
1 | FONT_SIZE| 12
2 | FONT_SIZE| 14
etc
如果您正在寻找 Java 的直接解决方案,您可以尝试 jsup,这是一个 java 库,用于在 [=] 中存储和获取简单的用户首选项26=] 数据库。
我是jsup作者,写了很多小applications/tools。我经常发现需要支持用户偏好,但找不到适合不同 SQL 数据库的库,所以我继续创建了 jsup。
它适用于各种常见的 SQL 数据库类型,并且易于上手:
Injector injector = Guice.createInjector(
new AbstractModule() {
@Override
protected void configure() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:h2:mem:testdb");
HikariDataSource dataSource = new HikariDataSource(config);
// Be sure to specify the correct dialect.
bind(Key.get(SQLDialect.class, UserPreferencesModule.UserPreferences.class)).toInstance(SQLDialect.H2);
bind(Key.get(DataSource.class, UserPreferencesModule.UserPreferences.class)).toInstance(dataSource);
}
},
new UserPreferencesModule());
UserPreferencesDb userPreferencesDb = injector.getInstance(UserPreferencesDb.class);
UserPreferencesAnalytics userPreferencesAnalytics = injector.getInstance(UserPreferencesAnalytics.class);
userPreferencesDb.setString("some-user", "ui", "theme", "default");
userPreferencesDb.setString("some-user", "ui", "display.timestamp.timezone", "UTC");
userPreferencesDb.addToSet("some-user", "app", "favorite.projects", ImmutableSet.of("prj1", "prj2"));
userPreferencesDb.setBoolean("some-user", "app", "email.on.failure", true);
System.out.println(userPreferencesDb.getString("some-user", "ui", "theme"));
System.out.println(userPreferencesDb.getString("some-user", "ui", "display.timestamp.timezone"));
System.out.println(userPreferencesDb.getSet("some-user", "app", "favorite.projects"));
System.out.println(userPreferencesDb.getBoolean("some-user", "app", "email.on.failure"));
System.out.println(userPreferencesAnalytics.getStringCategories());
System.out.println(userPreferencesAnalytics.getBooleanPreferencesByUser("app", "email.on.failure"));
除了用于存储和获取首选项的数据库界面之外,还有一个用于获取统计信息或更容易与其他工具集成的分析界面。
GitHub 页面上有示例和更多文档。如果有什么想补充的请开工单