2010-05-18 3 views
19

Reddit의 공동 창립자는 수백만 명의 사용자로 확장하면서 문제에 대한 프레젠테이션을했습니다. 요약은 here입니다."개방형 스키마"가있는 데이터베이스 - 좋든 나쁘지?

는 대신, 그들은 것 테이블 및 데이터 테이블을 유지 : 나를 놀라게 무엇

포인트 3입니다. Reddit의 모든 것은 사물입니다 : 사용자, 링크, 설명, 하위 참조, 수상 등. 것들은 상/하 투표, 유형 및 생성 날짜와 같은 공통 속성을 유지합니다. 데이터 테이블에는 thing id, key, value라는 세 개의 열이 있습니다. 모든 속성에 대한 행이 있습니다. 제목, URL, 저자, 스팸 투표 등에 대한 행이 있습니다. 새로운 기능을 추가 할 때 더 이상 데이터베이스에 대해 걱정할 필요가 없었습니다. 그들은 새로운 것에 대한 새로운 테이블을 추가하거나 업그레이드에 대해 걱정할 필요가 없었습니다.

이것은 나에게 끔찍한 생각처럼 보입니다.하지만 Reddit에서는 효과가있는 것 같습니다. 그래도 일반적으로 좋은 생각입니까? 또는 Reddit의 특이성이 그들을 위해 일 해낸 것입니까?

답변

16

이것은 엔티티 - 속성 값에 대해 EAV으로 알려진 데이터 모델입니다. 그것의 용도가 있습니다. 가장 대표적인 예는 수십만 건의 테스트가 실행되기 때문에 자연스럽게 희귀 한 환자 테스트 데이터이지만 환자에게는 일반적으로 소수만 존재합니다. 수십만 개의 열을 가진 테이블은 바보 같지만 EAV가있는 테이블이 좋습니다.

7

나는 데이터에 대한 보고서 작성의 어려움이나 어려움에 대해서는 언급하지 않았다. 좁은 환경에서 사용하면 EAV가 도움이 될 수 있습니다. 대부분의 시스템의 핵심 부분으로보고를 때리는 것은 악몽이 될 것입니다. EAV의 문제점은 대부분 프로젝트의 시작 시점에 있으며, 데이터 무결성의 심각한 부족으로 인해 분석 및보고의 후반부에 고통의 대부분이 발생한다는 것입니다. "외래 키에 대해 걱정할 필요가 없다"고 나에게 고아가 된 행의 악몽처럼 들린다. 모든 것을 위해 대리 키를 사용하면 엉성한 얽힘이 발생하여 일반적으로 완전히 다시 작성됩니다.

+0

실제로 이야기 하프만은 보고서를 만드는 방법과 텍스트를 파일로 내보내고 분석하는 방법에 대해 이야기합니다. https://vimeo.com/10506751 m24 : 50 –

+0

Reddit에는 보고서가 거의 없습니다 데이터 무결성 요구 사항. 특정 범위 사이에 있거나 복잡한 비즈니스 규칙이있는 날짜 또는 정수 값을 저장하는 것과는 다릅니다. 즉, reddit과 같은 사이트에서는 데이터의 정확성이 중요하지 않습니다. 그것은 단지 대부분 정확해야합니다. 그러나 LOB 앱은 부정확성에 그다지 관대하지 않습니다. Reddit의 디자인은 정확하지 않은 데이터를 포착하는 데 중점을 둡니다. 그러나 정확성에 대한 문제는 당신이 그것에 관심을 가질 때, 그것을 사전에 다루지 않는 것은 지나치게 비싸다는 것입니다. – Thomas

8

실제로 대부분의 웹 사이트는 데이터베이스 측면에서 매우 단순합니다. 이것은 빠르고 확장 가능하다는 장점이 있습니다. 데이터베이스에 자동으로 적용 할 모든 관계 (트리거 등을 통해)가 일 때이 필요하다는 단점이있어 클라이언트 코드에 직접 적용해야합니다. 일관성을 유지하는 것은 목에 통증이되며 적어도 짧은 기간 동안 데이터가 일관성을 잃을 가능성은 거의 항상 있습니다.

소셜 네트워킹 사이트의 경우 가치가있는 절충안입니다. 대부분의 경우 가장 적절한 데이터가 적절합니다 (예 : 항목에 대해받은 최대 득표 수가 실제로 전송 된 경우 20 밀리 초가 지나면 실제로 신경을 씁니다). gazillion을 지원하기 위해 확장하는 동안 비용을 합리적으로 유지합니다. 사용자는 중요합니다.

관련 문제