[REDIS] Stackexchange.Redis에 일괄 대 파이프 라이닝
REDISStackexchange.Redis에 일괄 대 파이프 라이닝
나는 짧은 시간에 요소 수의 큰 (-ish) 번호를 삽입하려고하고 나는이 두 가지 대안을 시도했다 :
1) 파이프 라인 :
List<Task> addTasks = new List<Task>();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Task<bool> addAsync = redisDB.SetAddAsync(string.Format(keyFormat, row.Field<int>("Id")), row.Field<int>("Value"));
addTasks.Add(addAsync);
}
Task[] tasks = addTasks.ToArray();
Task.WaitAll(tasks);
2) 배치 :
List<Task> addTasks = new List<Task>();
IBatch batch = redisDB.CreateBatch();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Task<bool> addAsync = batch.SetAddAsync(string.Format(keyFormat, row.Field<int>("Id")), row.Field<int>("Value"));
addTasks.Add(addAsync);
}
batch.Execute();
Task[] tasks = addTasks.ToArray();
Task.WaitAll(tasks);
내가 어떤 상당한 시간 차이를 알아 차리지하고 있지 않다 (실제로 나는 배치 방법이 빠를 것으로 예상) : 약 250K 삽입을 위해 나는 배치에 대한 약 8 초 대 파이프 라이닝을 위해 약 7 초 얻을.
파이프 라인에있는 문서에서 읽기,
나에게,이는 A 배치 행동처럼 많이 들린다. 나는 뒤에서 때문에 나는 거의 TCP 같은 수의 두 버전에 전송 볼 procmon 간단한 검사에서 둘 사이에 어떤 큰 차이가 있는지 궁금합니다.
해결법
-
==============================
1.내부적으로 SE.Redis 작업 꽤 그래서 귀하의 경우 매우 유사 것은 놀라운 일이 아니다, 피할 패킷 조각화 시도 않습니다. 배치 및 평면 파이프 라인의 주요 차이점은 다음과 같습니다 :
내부적으로 SE.Redis 작업 꽤 그래서 귀하의 경우 매우 유사 것은 놀라운 일이 아니다, 피할 패킷 조각화 시도 않습니다. 배치 및 평면 파이프 라인의 주요 차이점은 다음과 같습니다 :
SE.Redis가 자동으로 무엇을 간단하게 작업을 추가 할 때의 대부분을 달성하기 때문에 대부분의 경우, 배치를 피함으로써 더 잘 할 것입니다.
최종 참고로; 로컬 오버 헤드를 피하기 위해 원하는 경우, 하나의 최종 접근 일 수 있습니다 :
redisDB.SetAdd(string.Format(keyFormat, row.Field<int>("Id")), row.Field<int>("Value"), flags: CommandFlags.FireAndForget);
이 둘의 응답을 기다리고이나 미래의 값을 나타내는 불완전 작업을 할당, 와이어 아래 모두를 보냅니다. 당신은 서버가 계속 당신에게 얘기를 확인하기 위해, 파이어 앤 포겟없이 마지막에 핑과 같은 작업을 수행 할 수 있습니다. 불이 앤 잊지 사용하는 것은 당신이보고받을 모든 서버 오류를 통지하지 않습니다 것을 의미하지 않습니다.
from https://stackoverflow.com/questions/27796054/pipelining-vs-batching-in-stackexchange-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 나는 브라우저에서 실행되는 자바 스크립트에서 레디 스 서버에 직접 연결할 수 있습니까? (0) | 2019.12.31 |
---|---|
[REDIS] 레디 스 클러스터 - 생산 준비? (0) | 2019.12.31 |
[REDIS] 푸른 레디 스에 StackExchange.Redis는 unusably 느리거나 시간 초과 오류가 발생합니다 (0) | 2019.12.31 |
[REDIS] 어떻게 저장하고 레디 스에서 세션을 검색 할 (0) | 2019.12.31 |
[REDIS] 포크 메모리를 할당 할 수 없습니다 때문에 레디 스 실패 bgsave (0) | 2019.12.31 |