문제

의 많은"BAW"s(큰 엉덩이 웹 사이트)에 사용하는 데이터 저장 및 검색 기술에 의존하는 거대한 인덱스가 있는 테이블이며,쿼리를 사용하지 않는/을 사용할 수 없습에 참여 그들의 질문(BigTable,조회,etc.)처리하는 확장성과 분할 데이터베이스가 있습니다.어떻게 작동하는 경우가 많고 많은 양의 데이터는 관련?

나는 단지 추측 할 수 있는 많은 이에 가입 할 수있 응용 프로그램에서 측면의 것들,그러나지 않는 시작을 얻을 비싸요?는 무엇이 있는 경우 몇 가지를 쿼리하는 여러 가지 테이블에 정보를 얻기 위해 컴파일할?지 않는 데이터베이스는 많은 시간을 얻을 보다 더 비싼 다만을 사용하여 조인에서 첫 번째 장소는?나는 그것에 따라 얼마나 많은 데이터를 했습니까?

과에 대한 일반적으로 사용할 수 있는 ORMs,그들은 어떻게 처리하는 경향이있능을 사용하여 조?은 거기에 대한 지원이 이에서 ORMs 에 있는 무거운 사용법 오늘?또는 대부분의 프로젝트는 접근하는 이 레벨의 데이터는 롤 자신가요?

그래서 이 적용되는 현재의 모든 프로젝트에 나가지만,그것은 무언가가는 내 머리에 몇 개월 이제는 내가 단지 추측 할 수 있습 무엇으로"최상의 방법"니다.나는 본 적이 필요소에서의 프로젝트 때문에 그들은 결코 도달 규모가 그것이 필요합니다.이 질문에 다른 사람들이었습니다.

누군가가 말했듯이,아래의 ORMs"일하지 않"없이 결합합니다.기타 데이터 액세스를 레이어는 이미 개발자가 사용할 수 있는 데이터로 작업하는 이까?

편집: 일부에 대한 설명 Vinko Vrsalovic

"나는 믿 snicker 가 이야기하고 싶 에 대해 NO-SQL,어디 트랜잭션 데이터 는 비정규과에서 사용되는 하둡나 BigTable 또는 카산드라 계획이다."

이것은 참으로 내가 무슨 얘기입니다.

보너스 포인트한 사람들을 잡아라 감사를 참조.

도움이 되었습니까?

해결책

방법은 내가 그것을 보면,관계형 데이터베이스는 일반적인 도구들을 헤지펀드의 베팅합니다.현대 컴퓨터 충분히 빠르며,RDBMS'는 최적화되어 충분히 성장할 수 있는 아주 존경할 만한 크기에 하나의 상자입니다.을 선택하여 RDBMS 당신은 자신을 매우 유연한 데이터에 대한 액세스,그리고 능력 있는 강력한 정확성을 제약하는 것이 훨씬 쉽게 코드에 대한 데이터이다.그러나 RDBMS 되지 않은 가을 나타내는 좋은 최적화를 위한 특정 문제,그것은 단지는 유연성을 제공합을 변경하는 문제는 쉽습니다.

시작하는 경우 빠르게 성장하고 실현하는 것을 넘어서는 규모의 크기는 하나의 DB server,갑자기 당신은 훨씬 더 선택을 하게 됩니다.당신이 시작하기 위해 필요한 병목을 식별하고 제거 할 수 있습니다.RDBMS 고 불쾌한 심 매듭의 상호 의존해야 하는 애타게 떨어져있다.더 많은 상호 데이터의 더 많은 작업해야 할 수도 있지만,어쩌면 당신은 당신을 완전히 풀리게 전체 일이다.만약 당신이 읽고 무거운 어쩌면 당신이 얻을 수 있는 간단한 복제가 있습니다.만약 당신이 포화의 시장과 성장이 수평 어쩌면 당신은 수 있는 부분적으로 비정규화하여과 분할의 고정 숫자의 DB 서버에 있습니다.어쩌면 당신은 단지 소수의 테이블이 문제로 이동할 수 있습니다 더욱 확장된 데이터를 저장합니다.어쩌면 당신의 사용은 프로필에는 매우 캐시 친절하고할 수 있습니다 그냥 마이그레이션을 로드하는 거대한 memcached 클러스터입니다.

는 확장 가능한 키-값 저장처럼 BigTable 에 오는 경우 위의 아무도 일할 수 있는,그리고 당신은 너무 많은 데이터의 유형는 경우에도된 하나의 테이블은 너무 많은 한 서버입니다.이 시점에서 필요할 수 있는 파티션을 임의로 여전히 깨끗한 API 를 액세스할 수 있습니다.자연적으로 데이터가 퍼져서 이렇게 많은 기계에 있을 수 없습 알고리즘을 필요로 하는 이러한 컴퓨터 이야기를 각각 다른 많은 많은 표준의 관계 알고리즘을 필요합니다.당신이 배를 쿼리하는 알고리즘을 가능성이 필요한 더 많은 총 처리 능력을 상응하는 가입서 제대로 색인 관계형 데이터베이스하지만,때문에 그들은 병렬화된 실시간 성능은 크기보다 더 나은 어떤 하나의 기계 할 수 있는(가정 할 수있는 기계 전체를 인덱스에 존재하는지도).

지금은 일단할 수 있는 규모의 대규모 데이터 수평으로 놓(에 의해 연결 더 많은 서버),하드 부품의 확장성이 수행됩니다.잘 나가지 않아야 말 완료, 기 때문에,지속적인 운영과 발전에 이 스케일은 많이 보다 더 열심히 하나의 서버지점은 서버 응용 프로그램은 일반적으로 사소한 규모를 통해 공유 아키텍처만큼 그들은 필요한 데이터를 얻는다.

당신의 질문에 대답하는 방법에 대해 일반적으로 사용되는 ORMs 처리 무용인,짧은 대답은 .ORM 대 객체 관계형 매핑하고,대부분의 작업의 ORM 은 번역하는 강력한 관계형 패러다임의 조건부 로직 간단한 객체 지향 데이터 구조입니다.가장 값의 그들은 무엇을 줄 당신은 단순히 가능하게 될 것이라에서 키-값을 저장합니다.에서 실천해야 할 것입을 구축하고 유지하는 당신의 자신의 데이터 액세스를 계층에 적합하의 특정 필요하기 때문에,데이터를 프로파일에서 이 가늠하는 것은 극적으로 변화하고 있다고 생각은 너무 많은 장단점에 대한 일반적인 도구들이 등장하고 지배적 방법 Rdbms 니다.에서 짧은,당신은 항상 더 많은 마술에서 이 규모입니다.

는 말했다,그것은 확실히 흥미를 보이 어떤 종류의 관계 또는 다른 집계할 수 있는 기능의 상단에 내장되어 키-값 저장소 primitives.지는 않지만 충분한 경험을 여기에 댓글을 특별히지만,많은 지식에서 엔터프라이즈 컴퓨팅에 대한 이 돌아가 몇 년 동안(예를 들어.Oracle),많은 미개발 이론적 지식에 학계의 많은 실용적인 지식을 구글,아마존,Facebook,et al 지만,지식을 필터링으로 넓은 발전 지역 사회는 여전히 상당히 제한됩니다.

그러나 이제는 응용 프로그램의 많은로 이동하는 웹상의 세계 인구가 온라인,필연적으로 점점 더 많은 애플리케이션을 규모와 최고의 관행을 시작하여 결정하거든.지식 갭 것이 아래로 깍은 양쪽에서 클라우드 서비스 같은 애플리케이션과 EC2 뿐만 아니라,오픈 소스 데이터베이스는 다음과 같 카산드라입니다.어떤 의미에서 이것과 함께 손에 손을 병행하고 비동시성 계산에는 또한 초기 단계입니다.확실히 매혹적인 시간을 프로그래머가 될 것입니다.

다른 팁

당신은 잘못된 가정에서 시작합니다.

데이터웨어 하우징은 트랜잭션 애플리케이션이 정규화하는 것과 같은 방식으로 데이터를 정규화하지 않습니다. 조인의 "로트"가 없습니다. 상대적으로 적습니다.

특히 데이터웨어 하우스가 거의 업데이트되지 않기 때문에 특히 두 번째 및 세 번째 정상 양식 위반은 "문제"가 아닙니다. 그리고 업데이트되면 일반적으로 차원 행을 "현재"대 전류 "로 만드는 상태 플래그가 변경됩니다.

업데이트에 대해 걱정할 필요가 없으므로 업데이트가 변칙적 인 관계로 이어질 수없는 2NF 수준으로 분해되지 않습니다. 업데이트는 없음은 이상이 없음을 의미합니다. 그리고 분해가없고 결합이 없습니다. 당신은 모든 것을 사전에 가로지를 수 있습니다.

일반적으로 DW 데이터는 별 스키마에 따라 분해됩니다. 이를 통해 데이터를 숫자 (단위가있는 숫자) 및 차원에 대한 외국의 주요 참조를 포함하는 숫자 "사실"표로 분해하도록 안내합니다.

차원 (또는 "비즈니스 엔티티")은 속성을 가진 실제 일로 가장 잘 생각됩니다. 종종 여기에는 지리, 시간, 제품, 고객 등이 포함됩니다. 이러한 것들은 종종 복잡한 계층을 가지고 있습니다. 계층 구조는 일반적으로 다양한 비즈니스보고 요구에 의해 정의되며 별도의 테이블로 모델링 된 것이 아니라 단순히 집계에 사용되는 차원의 열의 열을 임의적입니다.


귀하의 질문 중 일부를 해결합니다.

"이 가입은 사물의 응용 프로그램 측면에서 수행되어야합니다." 거의. 데이터는로드되기 전에 "사전 조정"됩니다. 치수 데이터는 종종 해당 차원에 대한 관련 소스 데이터에 결합됩니다. 비교적 평평한 구조로 결합되어로드됩니다.

업데이트되지 않았습니다. 업데이트 대신 추가 과거 기록이 삽입됩니다.

"하지만 비용이 많이 들지 않습니까?" 거의. 데이터를로드하려면 약간의주의가 필요합니다. 그러나보고/분석 조인은 많지 않습니다. 데이터가 사전 조정되었습니다.

데이터가 사전 조정되었으므로 ORM 문제는 크게 무시됩니다. ORM은 적절한 사실 또는 차원에지도를 맵핑합니다. 특별한 경우를 제외하고, 치수는 작고 메모리에 완전히 적합한 경향이 있습니다. 금융 (은행 또는 보험) 또는 공공 시설에 있고 대규모 고객 데이터베이스가있을 때 예외입니다. 이러한 고객 차원은 메모리에 거의 맞지 않습니다.

JOIN 순수한 관계 용어이며 모든 데이터베이스가 관계형은 아닙니다.

다른 데이터베이스 모델에는 관계를 구축하는 다른 방법이 있습니다.

네트워크 데이터베이스는 끝없는 체인을 사용합니다 find a key - fetch the reference - find a key 일반적인 프로그래밍 언어로 프로그래밍해야합니다.

코드는 응용 프로그램 쪽이나 서버 측에서 실행할 수 있지만 SQL 그리고 세트 기반조차 없습니다.

올바르게 설계되면 네트워크 데이터베이스는 관계형 데이터베이스보다 훨씬 빠릅니다.

예를 들어, 네트워크 데이터베이스는 다른 엔티티에 대한 참조를 파일의 오프셋 또는이 엔티티에 대한 정보가 저장되는 디스크의 블록에 대한 직접 포인터로 저장할 수 있습니다.

이렇게하면 네트워크를 더 빨리 가로 지르며 효율적인 코드를 작성하면 그렇게 할 수 있습니다.

관계형 데이터베이스는 참조를 정수 (또는 트리플 또는 고차의 트리플 또는 튜플)와 같은 기본 값 쌍으로 만 저장할 수 있습니다.

관계형 데이터베이스에서 이러한 값을 찾으려면 엔진이 다음을 수행해야합니다.

  • 첫 번째 값을 포함하는 튜플이 어디에 있는지 알아보십시오.
  • 두 번째 값을 찾으십시오
  • a에서 루트의 주소를 찾으십시오 B-Tree 두 번째 숫자는 데이터를 보유하고 있습니다
  • 이 나무를 가로 지르십시오
  • 실제 테이블에 대한 포인터를 찾으십시오 ( B-Tree 그 자체로,이 경우 포인터는 PRIMARY KEY 우리가 뒤 따르는 행)
  • 포인터로 테이블의 행을 찾거나 테이블을 가로 지르십시오.
  • 마지막으로 결과를 얻으십시오.

그리고 당신은 이것을 어느 정도 만 제어 할 수 있습니다. 그 후, 당신은 그냥 발행합니다 SQL 질문하고 기다립니다.

관리 모델은 개발자의 수명을 단순화하기 위해 만들어졌으며, 항상 슈퍼 속도를 달성하지 않도록하는 것이 아닙니다.

이것은 어셈블리 대 높은 수준의 언어와 동일하며 관계형 모델은 더 높은 수준의 언어입니다.

내 블로그에서 기사를 읽고 싶을 수도 있습니다.

, 나는 일반적으로 사용되는 여러 데이터베이스 모델의 차이점을 설명하려고 노력합니다.

이런 식으로 데이터를 비유 할 때는 이질적인 품목에 가입하는 비용을 피하기 위해 그렇게합니다. 간단한 쿼리를 사용하는 성능 이점을 위해 일부 데이터가 복제 될 수 있으며이를 결합하는 특정 방법이 어려울 수 있음을 인정합니다.

응용 프로그램 수준에서 많은 양의 가입을해야한다면, 충분히 거절하지 않았 음을 의미합니다.

이상적으로는 원하는 데이터 세트에 대해 하나의 쿼리를 만들 수 있습니다. 실제로, 응용 프로그램의 모든 측면에 대해 2 ~ 3 개 이상의 쿼리를 사용할 필요는 없으며, 애플리케이션 수준의 결합은 개별 결과 세트에서 시야에 삽입을 삽입하기 위해 사소한 일을 더 많이 검색 할 수 있습니다.

이런 종류의 것은 진정으로 대규모 데이터 세트에만 필요하며 모든 종류의 트레이드 오프가 관련되어 있습니다. 하나의 예를 들어 보려면 : bigtable은 당신에게 계산하는 것과 같은 집계 쿼리를 할 수 없습니다. 지난 시간에 23,721 개가 추가 된 12,149,173 개의 레코드가 있다면 실제로 정확한 수치를 제공하는 데 사용될 수 있습니다. "약 12,100,000 개의 기록"이 있습니다. 응용 프로그램이 주어진 순간에 정확한 수치를 아는 데 의존한다면, 큰 태도를 사용해서는 안되며 일반적인 태도입니다.

Facebook과 같은 응용 프로그램에는 데이터 변경이 거의 없으며 대부분의 시간은 사용자가 새 항목을 게시하는 시간입니다. 따라서 곱하기 레코드가 항목이 변경 될 때 업데이트가 필요하다는 사실은 더 적은 문제입니다.

이를 통해 업데이트의 일반적인 문제에 도달하지 않고도 데이터를 정규화 할 수 없습니다.

Amazon과 같은 응용 프로그램은 단일 사용자에 대한 모든 데이터를 RAM에로드 할 수 있습니다 (결국 쇼핑 카트는 얼마나 큰가?) RAM으로 데이터를 업데이트하여 단일 데이터 항목으로 작성합니다.

다시 한 번 대부분의 데이터를 정규화해야 할 필요성을 제거합니다.

애플리케이션 개발의 용이성을 위해 스케일링을 거래하고 있으므로 크게 확장 할 필요가 없다면 RDBMS가 제공하는 응용 프로그램 개발의 용이성을 유지할 수 있습니다.

나는 이러한 상황에서 당신은 거의 스스로가 될 것이며 모든 것을 직접 굴려야 할 것이라고 생각합니다. 나는 거기에 없었지만 일부 프로젝트를 위해 그것을 고려했습니다. 당신은 관계형 DBS로 꽤 커질 수 있으므로 (보여 주듯이) 지금은 관계 적 선을 계속 즐길 것입니다.

일반적으로 데이터웨어 하우징은 조인 및 데이터 분할을 사용하여 차원 및 사실 테이블 (소위 "Star Schemas"등)을 사용하여 구축됩니다.

결합은 종종 정규화 된 테이블로 사전 계산되고 저장됩니다.

나는 일반적으로 전통적인 관계형 데이터베이스로 간주되지 않기 때문에 조인을 허용하지 않는 데이터베이스 시스템과 함께 작동하는 ORM 도구를 알지 못합니다.

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