2017-11-23 11 views
2

재고 테스트를 위해 사용하는 가격이 포함 된 간단한 테이블이 있습니다.KDB 쿼리 성능 향상

price_hist:([pxkey:`$()]price:`float$()) 
update `g#pxkey from `price_hist 

pxkey의 형식은 'MSFT_5M_201710060945'에 연결된 문자열, 그래서 재고 = MSFT, 가격, 줄 간격 = 5 분, 날짜 = 201,710,060,945. 개별 열 대신에 연결 문자열을 사용했습니다. 간단하고 KDB 초보자이며 빠르게 실행중인 항목을 얻고 싶었 기 때문입니다.

나는 거기에 약 500 만 행을 가지고 있으며 성능은 똑같은 데이터를 사용하는 MySQL보다 약간 빠릅니다. 이 방법을 개선하는 방법에 대한 아이디어는 (테이블 구조, 속성, 쿼리, 기타 등을 통해)? 참고로 나는 qSharp 라이브러리와 C#을 사용하고 있는데 내가 사전을 반환이 형식을 사용하고 쿼리 : - 생성 된 기호

price_hist`MSFT_5M_201710060945 

답변

1

만들기 수백만은 kdb +에서하는 것은 좋은 방법이 아닙니다. 당신이 그것을 채울 일단 성능을 향상시키기 위해

bar5m[(`MSFT;2017.10.06D09:45);`price] 

을 다음과 같이

bar5m:([sym:`$();time:`timestamp$()]price:`float$()) 

, 당신은 그것을 쿼리 할 수 ​​있어야한다 테이블이 있는지 확인 : 내가 대신 사전의 키 입력 테이블을 사용하는 것이 좋습니다 sym,time으로 정렬하고 p 속성을 sym에 넣습니다.

+0

내 경우에는 price_hist도 키드 테이블입니다. 맞습니까? 그래서 제안의 차이점은 키로 별도의 문자열과 날짜/시간 열을 사용하는 것입니다 [또한 바의 다른 테이블로 분할]. 별도의 문자열 및 datetime 열은 성능에 큰 영향을 미칩니 까? –

+0

기술적으로 keyed 테이블은 kdb +의 사전입니다. 한 테이블에서 다른 테이블로의 매핑입니다. 이러한 테이블에 단일 열이 있으면 키순 테이블은 간단한 사전과 거의 구별 할 수 없습니다. 내 답변의 주요 제안은 구성된 기호를 사용하지 않고 여러 키 열을 사용하는 것입니다. –

+0

알기 - 나는 그것을 시도 할 것이다 (그리고 아마 후속 조치로 돌아갈 것이다). 아, 한가지 더 .. u는 기존 데이터에서 새 테이블을 만들 수있는 빠른 구문을 제공 할 수 있습니까? 문자열을 날짜로 변환하는 것을 의미합니다. 20 초 정도 걸리 겠지만 2 시간은 걸릴 것입니다! 고마워요! –