保存在 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 databasesNOSQL、平面文件。
我认为 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 页面上有示例和更多文档。如果有什么想补充的请开工单