У меня есть приложение, которое записывает данные ключа, значения в Redis с помощью Apache Spark.Приложение работает без каких-либо проблем.Но приложение работает намного медленнее.Я ищу некоторые предложения по улучшению пропускной способности записи и увеличению параллелизма при записи данных в Redis.
Здесь приведен код
Dataset<Row> rowkeyMapping = services.select(regexp_replace(col("rowkey"), "_", "").as("rowkey"),struct(regexp_replace(col("name"), "\\[", ","), regexp_replace(col("oname"), "\\[", ","), col("cid")).as("detailsinfo"));
rowkeyMapping.foreach(obj -> {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(5000);
JedisPool pool = new JedisPool(poolConfig, "redis-host", Integer.parseInt("6379"));
Jedis jedis = pool.getResource();
ObjectMapper om = new ObjectMapper();
String[] rowArray = obj.mkString()
.replaceAll("[\\[]", ",")
.split(",");
String key = rowArray[0];
DetailInfo detail = new DetailInfo();
detail.setName(rowArray[1]);
detail.setOName(rowArray[2]);
detail.setCid(rowArray[3]);
String value = om.writeValueAsString(detail);
logger.info("writing key value pairs to Redis cache (Key) :: " + key);
jedis.set(key, value);
jedis.quit();
});
Я плохо понимаю RedisPipelining.Но я думаю, что Pipelining - это скорее пакетирование команд.Здесь, в моем случае, я имею дело с миллионами данных.Я не уверен, подходит ли конвейерная обработка.
Любая помощь приветствуется. Спасибо заранее.