-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
multiple key delete 기능 추가. #386
Comments
한 번의 delete 명령으로 다수의 키를 삭제한다는 게 캐시락 한 번이 아닌 request 한 번 맞나요? 비슷한 연산인 mget은 한 번에 만 개까지 처리하고 있는데, 100개라는 기준이 어떻게 잡힌 것인지도 궁금합니다. |
설계가 완료될 때까지는 다양한 채널로 @MinWooJin 와 논의해 보기 바랍니다. |
현재 mdelete는 nread과정에서 입력된 키들에 대해 remove 연산을 반복 호출하는 구조입니다. mget과 유사한 구조이지만 write 연산이기 때문에 이중화 기능을 사용할 경우 ENGINE_EWOULD_BLOCK이 리턴될 수 있습니다. 기존에는 write 연산을 여러번하는 연산이 없기 때문에, ENGINE_EWOULDBLOCK이 리턴될 경우 커넥션의 이벤트 루프를 중단했다가, notify_io_complete가 실행되면 다시 실행하는 방식으로 구현해도 문제가 없었습니다. 그러나 mdelete 과정에서 ENGINE_EWOULDBLOCK이 여러번 리턴될 경우, notify_io_complete가 실행되더라도 모든 연산이 slave에 반영되었다는 보장이 없습니다. 현재 커넥션 구조체의 ewouldblock 멤버는 불리언 변수이기 때문에 몇 개의 연산이 블락되었는지, 마지막으로 블락된 연산이 무엇인지를 확인할 길이 없습니다. 따라서 mdelete 연산을 정상적으로 수행하기 위해선 엔진 블락을 처리하는 구조를 바꾸어야 합니다. 현재 엔진 블락을 한 연산의 갯수를 세는 방향으로 설계하고 있습니다. 블락될 때 마다 카운트를 올리고, notify_io_complete가 호출될 때 마다 카운트를 차감하는 방식입니다. premature_notify_io_complete, io_blocked와 같은 블락 관련된 다른 변수도 변화를 주어야 하는지 검토중입니다. |
@computerphilosopher 이부분을 위주로 처리에 문제가 없는지, 성능에 오버헤드가 될 여지가 있는지 정리하면 좋겠습니다. |
|
pipe 기능 제공 명령sop exist를 제외하면 모두 write 명령입니다.
여러 개의 key를 입력받는 명령모두 read 명령입니다.
|
하나의 delete 명령으로 multiple keys를 삭제하는 기능을 제공한다.
The text was updated successfully, but these errors were encountered: