2015-02-03 5 views
1

현재 내 32 비트 kdb +/tick 설정에 일부 메모리 제약이 있습니다.이 경우 내 rdb이 훨씬 많이 소모됩니다.kdb의 다중 스레드 rdb

q 프로세스 초기화시 -s 태그가있는 다중 스레드를 사용하여 4GB 32 비트 어 드레서 블 한도를 얻을 수 있다는 것을 알고 있지만, rdb에이를 적용하는 방법이 확실하지 않습니다. 여기서 유일한 기능은 데이터를 생성하는 것은 upd:insert입니다.

다른 스레드의 메모리를 수동으로 할당 할 수 있습니까?

답변

1

알고있는 한, 스레드를 RDB 데이터를 저장하는 추가 메모리 소스로 사용할 수 없습니다. (그들은 그들 자신의 힙을 가지고 있지만, 그 행동들은 모두 커버 아래에 있으며, 당신이 그들을 납치하기에 충분히 노출되어 있지 않다). 스레드는 읽기 전용 데이터에서 함수/쿼리를 병렬 처리하도록 설계되었습니다.

는 는

생각을 몇 :

1) 당신은 당신이 각 테이블의 부분 집합에 가입 여러 RDB에있는 이에 한 구조를 만들 수 있습니다

RDB1은 -

RDB2를 표하기 위해 구독 - 구독 표 2, 표 3은

RDB3 - 그럼 당신은 CONN는 게이트웨이 프로세스를 생성

를 표 4에 등록 각 RDB에 영향을줍니다. 게이트웨이는 쿼리하려는 테이블을 결정하고 해당 RDB로 쿼리를 라우팅해야합니다.

2) 단일 테이블 (예 : 견적 테이블)이 너무 커서 단일 4GB 프로세스에 저장되지 않는 경우 해당 테이블을 티커로 분할하는 방법을 고려해야합니다 (예 : RDB1a는 시세 표를 구독하여 AM RDB1b는 시세 표 NZ에 대한 견적 테이블에 등록합니다. 그런 다음 게이트웨이는 어떤 시세 표시기가 요청되는지 알기에 충분히 영리해야하고 이에 따라 쿼리를 라우팅해야합니다.

3) RDB에있는 모든 데이터를 항상 필요로하지 않는 경우 (예 : RDB를 사용하여 말미에 디스크에 데이터를 저장하는 경우) 주어진 시간에 디스크에 주기적으로 저장하고 더 적은 양의 데이터를 메모리에 저장하는 alt-RDB를 사용합니다. (http://code.kx.com/q/cookbook/w-q/)

4) 모든 데이터를 항상 메모리에 저장하는 것을 진지하게 생각하고 있다면 전체 거래/견적 데이터 다음에는이를 달성 할 수있는 유일한 방법은 생산 라이센스입니다.

+0

아주 좋은 아이디어, 나는 같은 라인을 따라 생각하고있었습니다. 귀하의 의견을 주셔서 감사합니다 – nightTrevors

+1

또한 위에서 언급 했어야 - 제안 2) RDB1a와 RDB1b 둘 다 동일한 파티션의 동일한 테이블에 저장하려고 할 수 있기 때문에 당신이 말일의 저장 명령에주의해야합니다. 동시에 (날짜 분할로 가정). 당신은 어떻게 든 그들이 동시에 저축하지 않는다는 것을 보증해야 할 것입니다. 더 안전한 방법은 이러한 rdbs에 대한 일일 저장된 저장을 비활성화하여 서로 위에 트립하지 않고 alt-RDB (전체 테이블에 가입)를 실행하여 저장된 비트를 조금씩 수행하는 것입니다 – terrylynch