더북(TheBook)

매개변수로 날짜의 범위를 전달받아 처리하도록 쉽게 일반화할 수 있지만 이 함수는 구매 일자, 매개변수 단 하나만 받는다. 이 함수는 먼저 지역변수 두 개를 초기화하면서 시작한다. 먼저, 고객 ID를 담아놓을 v_custList는 빈 리스트로 초기화하고, 들어온 날짜에 구매한 고객의 범위에 대한 카운터를 담아놓을 v_rangeCntp_date 매개변수를 사용해 1로 초기화한다.

해당 날짜에 구매한 고객 수를 미리 알 수가 없으므로 while 루프를 태우면서 조건을 확인한다. 이때, 키를 확인해 해당 키가 없으면 while 루프를 끝낸다. 만약 2014년 6월 15일에 10명의 고객이 구매를 했다면 while 루프에서는 cust:061514:11:custID 키까지 있는지 확인하면서 데이터베이스에 각 키에 해당하는 키-값 데이터가 있는지 찾고, 없으면 while 루프를 종료한다.

while 루프에서 v_key 변수에 저장된 키는 myAppNS 이름공간에 있는 값을 찾는 데 사용된다. 이 키는 고객 ID를 반환하고 v_custList 변수에 이 값을 이어 넣는다. while 루프가 종료되면 고객 ID 리스트는 v_custList 변수에 담겨 반환된다.

이런 유형의 함수를 사용해 코드를 표준화할 수 있겠지만, 각각의 키-값 쌍을 개별적으로 가져오는 것보다 더 효율적이라고 볼 수는 없다. 일부 데이터 저장 구조에서는 값이 특정한 순서로 정렬되어 디스크에 저장될 수 있는데, 이 경우 값들이 연속적인 블록에 저장되기 때문에 값의 범위를 읽는 것이 더 효율적이다. 사용 중인 키-값 데이터베이스에서 정렬된 키 값을 제공하거나 보조 인덱스를 사용한다면 위에서 예로 든 함수를 사용하는 것보다는 값의 범위를 직접 조회하는 것이 좀 더 효율적일 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.