더북(TheBook)

값 검색의 한계

키-값 데이터베이스에서 값에 대한 작업은 모두 키를 기준으로 이뤄진다는 점을 명심하자. 키로 값을 검색하고 설정하며 삭제하는 등 키를 사용해 할 수 있는 작업이 꽤 많다. 이보다 더 많은 작업을 하려면, 예를 들어 세인트루이스(St. Louis)란 도시에 있는 어느 주소를 검색하고 싶다면 이 부분은 애플리케이션에서 구현해야 한다. 관계형 데이터베이스를 사용한다면 다음과 같은 SQL 질의를 수행해 주소를 검색할 수 있다.


SELECT
  address,
  city,
  state,
  zip
FROM
  Customer
WHERE
  city = 'St. Louis'

키-값 데이터베이스는 값을 검색하는 질의 언어를 지원하지 않는다. 이러한 제약을 해결하기 위한 두 가지 방법이 있다.

한 가지 방법은 값을 검색하는 부분을 애플리케이션에서 구현하는 것이다. 예를 들어 키를 생성하고 각 키로 값을 질의하여 검색 패턴에 따라 반환되는 값을 검증하면 된다.

다음과 같이 1232 NE River Ave, St. Louis, MO라는 문자열로 된 주소를 저장한다고 해보자.

appData[cust:9877:address] = '1232 NE River Ave, St. Louis, MO'

특정 도시에 있는 고객을 검색하는 의사 코드 함수는 다음과 같이 작성할 수 있다.


 define findCustomerWithCity(p_startID, p_endID, p_City):
 begin
 # 먼저 도시 이름과 일치하는 모든 주소를 담을
 # 비어있는 리스트 변수를 생성한다.
 returnList = ();
 # 식별자 값의 범위에서 루프를 돌면서 주소 값을 찾기 위한
 # 키를 만들고 난 뒤, inString 함수를 사용해 p_City 매개변수로
 # 전달받은 도시 이름이 address 문자열에 있는지 검사한다.
 # 만약 있으면 반환할 주소 리스트에 추가한다.
 for id in p_startID to p_endID:
    address = appData[‘cust:’ + id + ‘:address’];
    if inString(p_City, Address):
       addToList(Address,returnList );
 # 시작과 끝 ID 범위에 있는 모든 주소를 확인한 후
 # 특정 도시 이름과 함께 주소 리스트를 반환한다.
 return(returnList);
end;

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