2009-02-28 1 views
7

디스크에 스파 스 매트릭스를 저장해야합니다. 수백만 행과 수천 개의 열이있는 데이터베이스 테이블과 같으며 대부분 또는 대부분의 열이 null입니다. 일부 열에서 WHERE를 사용하는 SQL SELECT와 같이 쿼리 할 수 ​​있어야합니다.희소 한 쿼리 가능한 매트릭스를 디스크 또는 데이터베이스에 저장하는 방법은 무엇입니까?

내 구체적인 요구 사항은 Java입니다. 먼저 Berkeley DB for Java을 사용하여 테이블을 시뮬레이트한다고 생각했지만 값을 기준으로 쿼리를 지원하지 않았습니다.

그런 다음 일반 SQL 데이터베이스를 사용하려고 생각했습니다. 예를 들어 행 ID, 열 ID 및 값만있는 스키마를 만드는 경우를 예로들 수 있습니다. 가상 행은 동일한 ID를 갖는 모든 실제 행입니다. 그러나 이것은 데이터베이스 남용과 같습니다.

아이디어가 있으십니까?

+1

당신이 밖으로 어떻게 작동하는지 실제로했고, 무엇에 대한 설명이 스레드를 업데이트하십시오 수 : FriendFeed에서 유사한 요구 사항을 구현하기 위해 MySQL을 사용? –

+0

관심을 가져 주셔서 감사합니다. 나는 실제로 프로젝트를 진행하지 않았다. – mparaz

답변

3

질문 제목을 읽을 때 가장 먼저 생각한 것은 마지막 단락 옆에 제안한대로 (x, y) 당 데이터베이스 행이었습니다.

다른 주목할 점은 데이터베이스가 종종 NULL을 압축하는 경우가 많기 때문에 직설적 인 표현이 생각만큼 많은 공간을 낭비하지 않을 수 있다는 것입니다.

0

"대부분 또는 대부분의 열은 null입니다."라는 정의에 따라 다르지만 실제로는 무작위 액세스가 필요하다고 가정 할 때 매우 합리적인 방식으로 들립니다.

순차적 처리 (예 : 행 순서로 스캔)로 모든 작업을 수행 할 수 있다면 플랫 파일을 고려해야합니다.

1

Intersystems 캐시 데이터베이스는 스파 스 다차원 배열 인 데이터를 저장하기 위해 내부적으로 구조를 사용합니다. 어쩌면 체크 아웃 할 수 있습니다. 쿼리하여 SQL 테이블에 맵핑 할 수 있습니다. Java에서 Intersystems Cache의 다차원 배열에 직접 액세스 할 수 있는지 확실하지 않습니다.

0

"디스크에서"라고 말하면서 데이터를 저장하기 만하면 &을 다시 읽으십시오. 자신 만의 디자인과 선택을 간단하게 직렬화하는 것이 좋습니다.