SQL++/N1QL 쿼리

N1QL에서 세분화구 매칭 프로세스 모델링하기

이 조항의 목적

이 문서에서는 과세 지번 매칭 프로세스를 모델링하고 카우치베이스에서 실행하는 방법을 열거합니다. 데이터 모델 자체는 주관적인 것이지만, 이 문서에서는 모델과 관련된 주요 엔터티와 과세 지번 일치 프로세스를 실행하는 데 사용할 수 있는 N1QL 쿼리만 나열할 것입니다.

솔루션을 살펴보기 전에 독자들이 SQL과 매우 유사하지만 몇 가지 추가 JSON 관련 기능이 있는 N1QL의 일부 구조에 익숙해지거나 언젠가 투자할 의향이 있다고 가정합니다.

  1. 배열에 대해 NEST 절을 사용하여 행을 열로 바꿀 수 있습니다.
  2. UNNEST를 사용하여 배열을 행으로 분해할 수 있습니다.

JSON 문서와 N1QL은 기능이 매우 풍부하므로 구문에 대한 간단한 입문서를 작성하는 것이 매우 유용합니다.

https://learn.couchbase.com/store/

http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/index.html

과세 구역이란 무엇인가요?

세금 로트 는 포트폴리오에서 개시된 거래(예: 매수 또는 공매도)의 기록입니다. 주문이 여러 조각으로 체결되는 경우 이를 부분 체결이라고 하며, 가격은 평균화되어 단일 호가로 표시됩니다. 세금 로트 번호입니다. 여러 개의 세금 로트 보안 및 전반적인 위치 내에서.

유가증권을 구매할 때마다 새 포지션은 별개의 별개의 포지션입니다. 세금 로트 - 동일한 증권의 주식을 이미 소유하고 있는 경우에도 마찬가지입니다. (세금 로트는 매입 날짜 및 주식 수를 포함하여 거래와 세금에 미치는 영향을 기록한 기록입니다.) 

세금용지 식별 방법 는 서로 다른 날짜에 서로 다른 가격으로 여러 번 매수한 포지션이 있고 포지션의 일부만 매도하는 거래를 체결하는 경우 매도할 세금 랏을 결정하는 방식입니다. 당사는 법에 따라 이 정보를 추적 및 관리하고 원가 기준과 수익금을 귀하와 국세청에 보고해야 합니다.

선택한 세금용지 ID 방법은 자산을 판매할 때 납부할 세금 금액에 상당한 영향을 미칠 수 있습니다.

과세 지번 매칭 방법론

이 문서에 표시되는 쿼리에는 가장 많이 사용되는 방법론인 FIFO 방법만 표시되지만 방법론은 모두 동일하게 나열합니다.

 

FIFO(선입선출)

  1. 세금 랏을 일치시키는 기본 방법입니다. 판매는 가장 빠른 구매와 순차적으로 짝을 이룹니다. FIFO는 재고에 남아있는 자산이 가장 최근에 구매하거나 생산한 자산과 일치한다고 가정합니다. 선물 및 선물 옵션에는 항상 FIFO가 사용됩니다.

 

LIFO(라스트 인, 퍼스트 아웃)

  1. 각 판매는 가능한 가장 최근의 구매와 짝을 이룹니다. LIFO는 법인이 최신 재고를 먼저 판매, 사용 또는 처분한다고 가정합니다.

 

장기적인 수익 극대화 - 판매는 다음과 같은 우선 순위에 따라 쌍을 이룹니다:

1. 장기적인 주당 수익 극대화

2. 주당 단기 수익 극대화

3. 단기 주당 손실 최소화

4. 장기적인 주당 손실 최소화

 

장기적 손실 극대화 - 판매는 다음과 같은 우선 순위에 따라 쌍을 이룹니다:

1. 장기 주당 손실 극대화

2. 단기 주당 손실 극대화

3. 주당 단기 이익 최소화

4. 장기적인 주당 이익 최소화

 

단기 수익 극대화 - 판매는 다음과 같은 우선 순위에 따라 쌍을 이룹니다:

1. 주당 단기 수익 극대화

2. 장기적인 주당 수익 극대화

3. 장기적인 주당 손실 최소화

4. 단기 주당 손실 최소화

 

단기 손실 극대화 - 판매는 다음과 같은 우선 순위에 따라 쌍을 이룹니다:

1. 단기 주당 손실 최대화

2. 장기 주당 손실 극대화

3. 장기적인 주당 이익 최소화

4. 주당 단기 이익 최소화

 

최고 비용 - 수익을 최소화하면서 손실을 최대화합니다. 판매는 쌍을 기준으로 합니다.

를 클릭하세요:

  • 먼저, 청산 거래를 미체결 랏에 매칭하는 데 가능한 모든 옵션을 살펴봅니다.
  • 가능한 매치가 손실로 이어질 경우, 메서드는 다음과 같은 매치를 선택합니다.

를 사용하면 가장 큰 손실이 발생합니다.

  • 가능한 일치하는 항목이 없어 손실이 발생할 경우, 메서드는 다음과 같은 결과를 가져오는 일치 항목을 선택합니다.

가능한 최소한의 이득을 얻습니다.

 

특정 로트 - 모든 세금 랏과 마감 거래를 확인한 다음 수동으로 랏을 일치시킬 수 있습니다.

을 사용하여 거래할 수 있습니다. 특정 랏은 오늘 또는 포지션에 대해 사용할 수 있지만

계정 기본 일치 방법.

라이브 예제 사용

입력은 다음과 같습니다.

 

 

비즈니스 규칙에 따르면 세금을 최소화하려면 각 거래는 현재 거래 이후에 발생하는 거래와 반대 거래 유형(예: B는 매수를 의미하며, 이 경우 반대 거래 유형인 S 또는 SELL)의 거래로 청산되어야 하며, 수량은 청산되는 거래보다 같거나 커야 하고 청산되는 거래의 거래 날짜보다 큰 거래 날짜를 가져야 한다고 명시되어 있습니다.

특정 과세 지번 매칭의 엔티티

여러 고객, 고객에게 서비스를 제공하는 헤지펀드, 금융 서비스 회사에서 운영한다고 가정합니다. 캡처된 #의 요소는 여기에 나열된 것보다 훨씬 더 포괄적이지만, 여기서는 세금 로트 매칭 프로세스에 참여하는 가장 중요한 요소만 보여드리려고 합니다. Couchbase에서 이를 모델링하는 방법은 두 가지가 있습니다.

  1. 관계형 데이터베이스에서 마이그레이션하는 경우 일부 데이터를 빠르게 마이그레이션한 다음 비즈니스 모델링을 위해 NoSQL을 적용하려는 경우, 각 엔터티에 대해 문서 유형을 만들 수 있습니다(예: 트레이더가 하나의 엔터티, 상품이 다른 엔터티가 될 수 있습니다). 그리고 모든 문서에 문서 유형을 나타내는 유형 요소를 포함할 수 있습니다.

 

관계형 모델 샘플은 다음과 같습니다,

 

 

이를 그대로 번역하여 문서 모델에 적용하면 엔티티는 다음과 같이 표시됩니다.

 

 

 

TaxLot 매칭 프로세스가 실제로 발생하는 TradeOrder 엔티티에 대한 정규화 해제 모델 샘플

N1QL을 사용하여 세금 로트 프로세스 실행

TaxLot 매칭에 FIFO 방식을 사용한다고 가정하겠습니다. 이 프로세스는 미리 정해진 순서에 따라 행을 반복하고 결과 집합을 캐시해야 하므로 함수형 언어에 매우 적합하지만, 언어의 풍부함과 다양성 때문에 N1QL에서 이를 실행하는 방법을 열거하고 싶었습니다.

단계

  1. 독자가 Couchbase에 익숙하고 관리자 콘솔을 탐색할 수 있다고 가정합니다.
  2. 버킷을 생성하고, Taxlot_Demo라고 부르겠습니다.
  3. 필요한 문서를 작성하여 좋은 테스트베드를 확보하세요.
  4. 그런 다음 일치 조건 그룹에 대한 모든 거래의 배열을 생성하는 임시 버킷을 만듭니다. 이 경우 특정 펀드, 트레이더, 브로커, 전략, 상품, 트레이딩 유형만 일치시키고자 한다고 가정하면 이전과 이후의 그림은 다음과 같습니다.

 

 

5. 그런 다음 단일 쿼리에서 세금 번호 일치 항목을 가져옵니다. 쿼리가 많은 것을 달성하므로 이해하기 쉽도록 단계별로 나누고 마지막에 전체 쿼리를 나열합니다. 단계 e는 Couchbase에서 Taxlot 프로세스를 실행하는 데 필요한 유일한 쿼리이며, 중간 글머리 기호 a, b, c, d는 단계 e의 더 큰 쿼리를 열거할 뿐입니다.

a. f단계의 가장 안쪽 쿼리는 4단계의 키와 일치할 수 있는 연결된 열을 생성합니다.  

 

 b. 다음으로 4단계에서 생성한 구체화된 테이블에 조인하면 이 쿼리의 결과는 그룹화 기준 내의 각 거래와 가능한 일치 항목 배열이 됩니다.

 

c. 그런 다음 배열의 중첩을 해제하여 그룹 내의 모든 행 간에 다대다 관계를 만듭니다. 펀드아이디, 트레이더아이디, 브로커아이디, 전략, 상품아이디, 롱숏 

 

d. 그런 다음 비즈니스 규칙을 적용하여 반대쪽 서명 거래를 가져와 세금 로트와 일치하는 거래를 찾습니다.

e. 그런 다음 마지막으로 폐쇄해야 하는 레코드만 다시 전달합니다.

 

결과

따라서 데이터 세트가 다음과 같다면, 거래 1은 매수 거래이고 매도 거래인 거래 2와 일치하므로 거래 1은 거래 2로 청산됩니다. 거래 3은 일치하는 항목이 없으므로 청산되지 않습니다.

마찬가지로 거래 4도 거래 5로 마감됩니다.

거래 7~9는 모두 매수 거래이며 일치하는 매도 거래가 없으므로 청산되지 않습니다.

 

결론

 

이 글의 목적은 매우 복잡한 데이터 액세스 쿼리를 해결하는 데 N1QL을 사용하는 방법을 열거하는 것이었습니다. SQL로 복잡한 기능을 작성하는 데 익숙하다면 이제 다음에서 매우 쉽게 수행할 수 있습니다. N1QL. 이 문서에 사용된 예제는 따라 하기 쉽도록 의도적으로 단순화되었으며, 조직에서 원하는 결과를 얻기 위해 몇 가지 조정 또는 추가 조인 또는 쿼리를 추가해야 할 수도 있습니다.

 

카우치베이스 서버 아키텍처를 더 잘 이해하려면 다음 링크를 참조하세요. https://www.couchbase.com/downloads/?family=couchbase-server/

 

N1Ql과 이 솔루션이 제공하는 구조에 대해 자세히 알아보려면 다음 링크를 확인하세요.

https://developer.couchbase.com/documentation/server/4.1/n1ql/index.html

 

 

____________________________________________________________________________

이 글은 산디아 크리슈나무르티(Sandhya Krishnamurthy) 수석 솔루션 엔지니어가 작성했습니다. 카우치베이스는 NoSQL 데이터베이스의 선도적인 공급업체입니다.

작성자에게 문의 sandhya.krishnamurthy@couchbase.com

 

무료 제품 다운로드 및 무료 교육을 받으려면 아래 사이트를 방문하여 Couchbase 제품에 대해 자세히 알아보세요.

www.couchbase.com

https://www.couchbase.com/downloads/

https://learn.couchbase.com/store/

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Sandhya Krishnamurthy, 선임 솔루션 엔지니어, Couchbase

산디아 크리슈나무르티는 데이터베이스 개발 배경과 사전 영업 경험이 풍부한 기술 전문가입니다. 그녀는 파트타임 아티스트, 파트타임 가수, 풀타임 엄마이기도 합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.