515
12
장
현장에서 얻은 교훈
카산드라
1
.
2
가 복잡한 인덱스 질의를 허용하지 않아서, 그런 기능은 조인과 비슷한 질의를 사
용해 지원했다. 하지만 최대
4GB
까지의 작은 데이터셋은 대부분을 메모리에 데이터를 넣은
채로 처리해야만 하므로 복잡한 질의를 허용했다.
PyPy
는 균질 리스트를 메모리에 더 조밀하
게 넣는 전략을 택했기 때문에, 심지어
C
파이썬이 데이터를 메모리에 올리지 못하더라도 잘 작
동했다.
PyPy
의 다른 이점은 데이터 조작이나 분석이 일어나는 루프에서
JIT
컴파일이 실행된
다는 점이다. 우리는 루프 내부에서는 타입이 변경되지 않도록 코드를 작성했다. 그렇게 하면
JIT
컴파일 효과가 특히 더 좋아진다.
문서를 색인하고 빠르게 검색하려고 일래스틱서치를 사용했다. 일래스틱서치는 질의의 복잡
도 면에서 매우 유연하며 사용하면서 큰 문제를 겪은 적도 없었다. 우리가 겪은 문제 하나는 문
서를 갱신할 때 나타났다. 일래스틱서치는 빠르게 바뀌는 문서를 처리하도록 설계되지 않아서
그 부분을 카산드라로 이전할 수밖에 없었다. 다른 한계는 데이터베이스 인스턴스가 요구하는
메모리나 여러 패싯
facet
과 관련이 있었다. 하지만 그런 문제는 더 작은 질의를 사용하고 셀러리
작업을 사용해 데이터를 수동으로 처리하는 방식으로 해결할 수 있었다. 일래스틱서치 서버 풀
과의 상호작용에 사용한
PyPy
나
PyES
라이브러리에서는 한 번도 큰 문제를 마주친 적이 없다.
12.9.3
웹 애플리케이션
앞에서 말했듯이, 우리는 서드파티 확장과 플라스크 프레임워크를 ...