2012-03-10 2 views
0

현재 트랜잭션이 많은 응용 프로그램을 작성 중입니다. 값은 int, bit, short 문자열, 큰 문자열 등이 될 수 있지만 각 트랜잭션은 값을 갖습니다.다른 유형의 SQL 데이터베이스에 저장된 값

이 작업을 실행하려면 최소한 처리 및 저장을 유지하려고합니다. 구름. 예를 들어 트랜잭션에 많은 다른 필드가 있어야합니다.

TransactionLine.valueint 
TransactionLine.valuestring 
TransactionLine.valuedecimal 
TransactionLine.valuebool 

또는 각 거래 값 유형별로 별도의 표가 있어야합니까?

TransactionLine - Table 
--------------- 
TransactionLine.ValueId 


ValueInt -Table 
------- 
ValueInt.ValueId 
ValueInt.Value 

ValueString - Table 
------- 
ValueString.ValueId 
ValueString.Value 
+0

문자열에 어떤 문제가 있습니까? 문자열은 숫자와 비트를 나타낼 수 있습니다. – Andomar

+0

나는 그것이 또 다른 옵션이 될지 궁금 해서요.하지만 모든 트랜잭션에 대해 nvarchar (최대)를 가졌다면 더 많은 공간을 차지하지는 않습니다. 나는 당신의 레코드가 퍼포먼스에 필요한만큼의 문자만을 사용한다고 들었다. - 틀렸어. –

+0

데이터 유형을 알지 못한다고하는 이러한 거래는 무엇입니까? – eaolson

답변

1

데이터베이스에 키 - 값 쌍을 저장할 수 있습니다. 다른 데이터 유형을 저장할 수있는 유일한 데이터 유형은 VARCHAR (MAX) 또는 BLOB입니다. 즉, 저장하기 전에 모든 데이터를 문자열로 변환해야합니다. 전환에는 처리 시간이 소요됩니다.

반대 방향으로 숫자 데이터의 SUM 또는 MAX 또는 AVG, ...를 수행하려면 먼저 문자열을 실제 데이터 유형으로 다시 변환해야합니다. 그 변환도 처리 시간이 걸립니다.

데이터베이스가 쓰여지는 것보다 더 많이 읽습니다. 변환 악몽은 무릎에 시스템을 얻을 것이다. 이 주제에 관해 많은 논란이있었습니다. 전환의 높은 비용은 살인자입니다.

전체 데이터베이스를 단일 테이블에 저장하는 시스템이 있습니다. 그러나이 경우 전체 시스템은 하나의 명확한 목표를 가지고 구축됩니다. 즉, SQL과 같은 관계형 데이터베이스 언어가 아닌 C (++, #)와 같은 빠른 컴파일 된 프로그래밍 언어로 시스템을 효율적으로 지원하는 것입니다.

나는 당신이 정말로 원하는 것을 완전히 이해하고 있다고 생각하지 않습니다. 트랜잭션 만 저장하려는 경우이 방법이 유용 할 수 있습니다. 그런데 왜 한 번에 하나의 필드 만 저장하고 싶습니까? 데이터는 레코드 그룹으로 저장됩니다. 레코드의 각 열과 모든 열의 데이터 형식은 테이블을 만들 때 알 수 있습니다.

1

실제로는 cassandra을 조사해야합니다. 많은 거래를 할 때 수백만 건의 레코드를 의미합니까? 카산드라에게는 수백만 건의 레코드를 처리하는 것이 일반적입니다. column family (rdbms에는 테이블이 열 패밀리와 유사 함)에 많은 행이 저장되며 각 행에 대해 열을 미리 정의 할 필요가 없습니다. 수요에 따라 정의 할 수 있으므로 특히 많은 레코드를 다루는 경우 스토리지가 크게 줄어 듭니다.

열 값의 기본 데이터 유형이 BytesType이므로 데이터가 data type int, string, decimal 또는 bool인지 걱정할 필요가 없습니다. 원하는 경우 열 패밀리 열 메타 데이터에서 미리 정의 할 수있는 다른 데이터 유형이 있습니다. 신청서 작성을 시작하기 때문에 언젠가는 카산드라를 읽고 그 상황에서 어떻게 도움이 될지 알려 드릴 것입니다.

관련 문제