문제

Google Bigtable 및 Amazon SimpledB와 같은 새로운 학교 데이터 스토어 패러다임은 무엇보다도 확장 성을 위해 특별히 설계되었습니다. 기본적으로, 합류하지 못하고 비정상화가 이루어지는 방법입니다.

~ 안에 이것 그러나 주제는 대형 테이블에 합류하는 것이 너무 비싸지 않아야 할 필요가없고 거절이 어느 정도 "과대 평가 된"것으로 보인다. 확장 성을 달성하기 위해? 이 시스템 (많은 테라 바이트)에 저장 해야하는 것은 엄청난 양의 데이터입니까?
데이터베이스의 일반적인 규칙은 단순히 이러한 척도에 적용되지 않습니까? 이러한 데이터베이스 유형이 많은 유사한 개체를 저장하기 위해 특별히 맞춤화 되었기 때문입니까?
아니면 더 큰 사진이 빠졌습니까?

도움이 되었습니까?

해결책

분산 데이터베이스는 Orion이 암시하는 것만 큼 순진한 것이 아닙니다. 분산 데이터 세트를 통해 완전히 관계형 쿼리를 최적화하는 데 약간의 작업이 수행되었습니다. Teradata, Netezza, Greenplum, Vertica, Asterdata 등과 같은 회사가 무엇을하고 있는지보고 싶을 수도 있습니다. (Oracle은 최근 발표와 함께 게임에 참여했습니다. Microsoft는 DataAllegro라고 불리는 회사의 이름으로 솔직한 것을 구입했습니다).

즉, 데이터가 테라 바이트로 확장 될 때 이러한 문제는 매우 사소하지 않습니다. RDBMS에서 얻을 수있는 엄격한 트랜잭션과 일관성 보장이 필요하지 않으면 종종 교체하기가 훨씬 쉽고 조인하지 않습니다. 특히 교차 참조 할 필요가 없다면. 특히 임시 분석을 수행하지 않지만 임의의 변환으로 프로그래밍 방식으로 액세스 해야하는 경우.

거절이 과대 평가되었습니다. 그것이 100 Tera를 다룰 때 일어나는 일이기 때문에 데이터베이스에 대해 배우는 것을 귀찮게하지 않고 스키마 계획 및 쿼리 최적화로 인해 백만 또는 두 개의 행을 쿼리하는 데 어려움이있는 모든 개발자 가이 사실을 사용해야한다는 것을 의미하지는 않습니다. .

그러나 당신이 100 Tera 범위에 있다면, 반드시 ...

오,이 기술들이 버즈를 받고있는 또 다른 이유- 사람들은 처음에 일부 것이 데이터베이스에 속한 적이 없다는 것을 발견하고 있으며, 특정 분야의 관계를 다루지 않고 기본 키가 있다는 것을 깨닫고 있습니다. 가치 쌍. DB에 없었던 것들의 경우, 맵-레지 디체 프레임 워크 또는 일부 지속적이고 결국 일관된 스토리지 시스템이 단지 문제 일 수 있습니다.

덜 전 세계적으로, 나는 이러한 종류의 문제에 대해 BerkeleyDB를 적극 권장합니다.

다른 팁

나는 그들에 대해 너무 익숙하지 않지만 (나는 다른 사람들과 같은 블로그/뉴스/예제 만 읽었습니다), 나는 그것들을 확장 성이라는 이름으로 많은 정상적인 관계형 DB 기능을 희생하기로 결정했다는 것입니다. 설명해 드리겠습니다.

데이터 테이블에 200 행이 있다고 상상해보십시오.

Google의 데이터 센터 에서이 행 중 50 개는 서버 A, B의 50 개 및 서버 C의 100에 저장됩니다. 서버 D도 서버 A와 B의 데이터 사본이 포함되어 있으며 서버 E는 서버 C의 중복 사본을 포함합니다.

(실생활에서는 얼마나 많은 서버가 사용될 지 모르겠지만 수백만 행을 다루기 위해 설정되어 있으므로 상당히 상상합니다).

"select * where name = 'orion'"을 위해 인프라는 모든 서버에 해당 쿼리를 발사하고 다시 나오는 결과를 집계 할 수 있습니다. 이를 통해 원하는만큼 많은 서버에서 거의 선형으로 확장 할 수 있습니다 (FYI 이것은 MapReduce가 거의 없습니다).

그러나 이것은 당신이 약간의 트레이드 오프가 필요하다는 것을 의미합니다.

5 개의 서버에 걸쳐 퍼져있는 일부 데이터에 관계없이 관계를 맺어야한다면 각 서버는 서로 데이터를 가져와야합니다. 각 행에 대해. 10 개의 서버에 2 백만 행이 퍼져있을 때 그렇게 해보십시오.

이것은 트레이드 오프 #1- 조인이 없습니다.

또한 네트워크 대기 시간, 서버로드 등에 따라 일부 데이터가 즉시 저장 될 수 있지만 일부는 1 초 또는 2가 걸릴 수 있습니다. 다시 수십 개의 서버가있을 때 더 길고 길어지고 정상적인 접근 방식이 있습니다. '가장 느린 사람이 끝날 때까지 모든 사람이 기다립니다.'더 이상 허용되지 않습니다.

이것은 트레이드 오프 #2로 이어집니다. 데이터가 작성된 후에는 항상 즉시 보이지 않을 수 있습니다.

나는 다른 트레이드 오프가 무엇인지 잘 모르겠지만 내 머리 꼭대기에서 메인 2입니다.

따라서 내가 얻는 것은 "거부, 결합 없음"철학 전체가 존재한다는 것입니다. 결합은 대형 시스템에서 확장되지 않기 때문이 아니라 분산 데이터베이스에서 구현하는 것이 실제로 불가능하기 때문입니다.

이것은 단일 유형 (Google과 같이)의 대부분의 불변 데이터를 저장할 때 꽤 합리적입니다. 내가 여기 올바른 길을 가고 있습니까?

사실상 읽기 전용 인 데이터에 대해 이야기하는 경우 규칙이 변경됩니다. 필요한 작업이 증가하고 잠금에 더 많은 문제가 발생하여 데이터가 변경되는 상황에서는 피부화가 가장 어렵습니다. 데이터가 간신히 변경되면 비정규 화는 그다지 문제가되지 않습니다.

Novaday 데이터베이스에 대한 더 많은 상호 운용 환경을 찾아야합니다. 더 자주 MySQL 또는 MS SQL과 같은 관계형 DBS 만 필요하지 않고 Hadoop 또는 MongoDB와 같은 비 관계형 DBS와 같은 빅 데이터 농장도 필요합니다. 경우에 따라 모든 DBS는 하나의 솔루션에 사용되므로 성능은 매크로 스케일로 최대한 동일해야합니다. 즉, Azure SQL을 관계형 DB로 사용하고 MongoDB의 경우 2 개의 코어와 3GB RAM이있는 1 개의 VM을 사용할 수 없습니다. 솔루션을 확장하고 가능할 때 DB를 서비스로 사용해야합니다 (가능하지 않은 경우 클라우드에 고유 한 클러스터를 작성하십시오).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top