Java 本地存储静态数据

Java 本地存储静态数据,java,json,spring,Java,Json,Spring,我目前有200行key->value,value,其中一个key有两个值。即使我只使用第一个值 我想知道如何处理这个问题,是使用json文件存储所有这些数据并将其转换为映射,还是创建一个enum类来存储所有这些数据 假设数据需要持久化,我不知道如何解决这个问题 在java中,这样的需求很方便。这可用于存储任何可序列化类型 地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持 import org.mapdb.DB; import org.mapdb.DBMaker; private DB

我目前有200行key->value,value,其中一个key有两个值。即使我只使用第一个值

我想知道如何处理这个问题,是使用json文件存储所有这些数据并将其转换为映射,还是创建一个enum类来存储所有这些数据


假设数据需要持久化,我不知道如何解决这个问题

在java中,这样的需求很方便。这可用于存储任何可序列化类型

地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持

import org.mapdb.DB;
import org.mapdb.DBMaker;

private DB mapDb;
    private ConcurrentMap<String, LinkedHashSet> translationMap;

    @PostConstruct
    private void init() {
        log.info("Map db Start initiated...");

        mapDb = DBMaker
                .fileDB(new File(nosqlDbPath))
                .fileMmapEnable()
                .transactionEnable()
                .make();

        translationMap = (ConcurrentMap<String, LinkedHashSet>) mapDb.hashMap("map").createOrOpen();
        log.info("Map db Start completed.");
    }


    @PreDestroy
    private void close() {
        log.info("Map db shutdown initiated...");
        mapDb.commit();
        mapDb.close();
        log.info("Map db shutdown complete.");

    }
import org.mapdb.DB;
导入org.mapdb.DBMaker;
私有数据库;
私有ConcurrentMap translationMap;
@施工后
私有void init(){
log.info(“启动映射数据库…”);
mapDb=DBMaker
.fileDB(新文件(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap=(ConcurrentMap)mapDb.hashMap(“map”).createOrOpen();
log.info(“Map db Start completed.”);
}
@发情前期
私人作废关闭(){
log.info(“映射数据库关闭已启动…”);
commit();
mapDb.close();
log.info(“映射数据库关闭完成”);
}
translationMap将在启动时保存所有数据


如果数据需要持久化,不要忘记添加MapDB JAR

在java中,这样的需求很方便。这可用于存储任何可序列化类型

地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持

import org.mapdb.DB;
import org.mapdb.DBMaker;

private DB mapDb;
    private ConcurrentMap<String, LinkedHashSet> translationMap;

    @PostConstruct
    private void init() {
        log.info("Map db Start initiated...");

        mapDb = DBMaker
                .fileDB(new File(nosqlDbPath))
                .fileMmapEnable()
                .transactionEnable()
                .make();

        translationMap = (ConcurrentMap<String, LinkedHashSet>) mapDb.hashMap("map").createOrOpen();
        log.info("Map db Start completed.");
    }


    @PreDestroy
    private void close() {
        log.info("Map db shutdown initiated...");
        mapDb.commit();
        mapDb.close();
        log.info("Map db shutdown complete.");

    }
import org.mapdb.DB;
导入org.mapdb.DBMaker;
私有数据库;
私有ConcurrentMap translationMap;
@施工后
私有void init(){
log.info(“启动映射数据库…”);
mapDb=DBMaker
.fileDB(新文件(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap=(ConcurrentMap)mapDb.hashMap(“map”).createOrOpen();
log.info(“Map db Start completed.”);
}
@发情前期
私人作废关闭(){
log.info(“映射数据库关闭已启动…”);
commit();
mapDb.close();
log.info(“映射数据库关闭完成”);
}
translationMap将在启动时保存所有数据


不要忘记添加MapDB JAR,因为它只有200个条目,您有很多选择

1。只需将其存储在Hashmap中。

优点:

  • 尽可能简单。O(1)向上看
缺点:

  • 如果有多个线程对此进行了变异,那就是自找麻烦

  • 秩序将不会维持

  • 对TTL没有规定

2。将其存储在LinkedHashMap中

与Hashmap相同,只是顺序将被保留

3。将其存储在ConcurrentHashmap中

与Hashmap相同,只是即使多个线程尝试对其进行变异,也可以使用这个Hashmap

4。将其储存在CaffeineCache中

您可以设置TTL

5。将其存储在EHCache中

您可以设置TTL。设置以存储在堆外主内存中。磁盘溢出的准备

上述所有方法都在利用主内存。它将为您提供最高的读取性能。不用说,这一切都是短暂的,一旦你关掉机器,它就会消失。另一方面,在运行时,如果您希望对其进行变异,并在重新启动时保持这些变异,那么您可能需要查看更多的持久性存储

因为它是一个键值查找,所以当应用程序启动时,您可以使用
静态
块或
@PostConstruct
带注释的方法或构造函数来填充它。或者,如果您在spring boot land中,您可以利用
@Configuration
带注释的类和
@Value
带注释的映射成员变量以及一个属性/yaml文件,在该文件中您拥有所有数据并将其注入

关于2个值

如果您确定,您将只获得2个值,例如,我会将其更改为类型化类

class Values {
 Value left;
 Value right;
}

毕竟它不是一个列表,而是一个强类型语言程序,因为它只有200个条目,所以你有很多选择

1。只需将其存储在Hashmap中。

优点:

  • 尽可能简单。O(1)向上看
缺点:

  • 如果有多个线程对此进行了变异,那就是自找麻烦

  • 秩序将不会维持

  • 对TTL没有规定

2。将其存储在LinkedHashMap中

与Hashmap相同,只是顺序将被保留

3。将其存储在ConcurrentHashmap中

与Hashmap相同,只是即使多个线程尝试对其进行变异,也可以使用这个Hashmap

4。将其储存在CaffeineCache中

您可以设置TTL

5。将其存储在EHCache中

您可以设置TTL。设置以存储在堆外主内存中。磁盘溢出的准备

上述所有方法都在利用主内存。它将为您提供最高的读取性能。不用说,这一切都是短暂的,一旦你关掉机器,它就会消失。另一方面,在运行时,如果您希望对其进行变异,并在重新启动时保持这些变异,那么您可能需要查看更多的持久性存储

因为它是一个键值查找,所以当应用程序启动时,您可以使用
静态
块或
@PostConstruct
带注释的方法或构造函数来填充它。或者,如果您在spring boot land中,您可以利用
@Configuration
带注释的类和
@Value
带注释的映射成员变量以及一个属性/yaml文件,在该文件中您拥有所有的dat