保存java桌面应用程序应用程序和网站上使用的个人用户设置的最佳方法

保存java桌面应用程序应用程序和网站上使用的个人用户设置的最佳方法,java,mysql,Java,Mysql,我正在创建一个应用程序,将所有用户设置存储到MySQL服务器中。但现在我得到了一些东西,当tableOption3=id25时,用户主题是红色的。我已经有5张这样的桌子了。它会变得更大。用户可以使用移动应用程序保存网站和java应用程序的个人设置,反之亦然 我还有其他选择吗? 我一直在想,如果有100个个人选项需要加载,会发生什么。用户是否会在加载速度中注意到这一点。您必须将这些个人用户设置保存在某个位置,并且您将始终希望使用某种类型的数据存储,例如:SQL数据库,NOSQL,平面文件。 我认为

我正在创建一个应用程序,将所有用户设置存储到MySQL服务器中。但现在我得到了一些东西,当tableOption3=id25时,用户主题是红色的。我已经有5张这样的桌子了。它会变得更大。用户可以使用移动应用程序保存网站和java应用程序的个人设置,反之亦然

我还有其他选择吗?
我一直在想,如果有100个个人选项需要加载,会发生什么。用户是否会在加载速度中注意到这一点。

您必须将这些个人用户设置保存在某个位置,并且您将始终希望使用某种类型的数据存储,例如:
SQL数据库
NOSQL
,平面文件。
我认为SQL数据库通常是可行的,拥有超过100个个人选项不应该太降低性能

但我的建议是避免使用多个表。您可以通过仅使用一个表来实现所需的效果,为所有用户存储所有属性,即:

 USER_ID | PROPERTY | PROPERTY_VALUE
 1       | COLOR    | RED
 2       | COLOR    | BLUE
 1       | FONT_SIZE| 12
 2       | FONT_SIZE| 14
etc

如果您正在寻找一个针对Java的下拉式解决方案,您可以尝试,这是一个Java库,用于在SQL数据库中存储和获取简单的用户首选项

我是jsup的作者,写了很多小应用程序/工具。我经常发现需要支持用户首选项,但没有找到一个适用于不同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"));
除了用于存储和获取首选项的DB接口外,还有一个用于获取统计数据或使与其他工具的集成更容易的分析接口


GitHub页面上有示例和更多文档。如果有您想要添加的内容,请打开一张票证。

您考虑过使用NOSQL db吗?如果您只想在桌面应用程序的登录/注销时加载和保存用户首选项,您可以将其保存在一个类中,然后在注销时序列化,在登录时再次反序列化。这不是你甚至不会注意到加载100个首选项的时候,我没有使用NoSQL的经验。但在这种情况下,你为什么更喜欢NOSQl?@ziker我肯定会研究这个问题。我们在课堂上使用了这个问题,但我可以简单地创建一个包含所有用户设置的类,并将其存储到数据库中?这个问题也应该对你有所帮助@Fazovsky提供了很好的答案很好的主意我一定会尝试一下。看起来很有希望。