2009-07-06 5 views
1

데이터베이스에 익숙하지 않아 SQLAlchemy를 사용하여 테이블을 분할하는 방법을 알지 못합니다.테이블 파티션을 만드는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

+0

구체적으로 말해서 - "파티션"을 의미하는지 확인하십시오. 이 단어에는 많은 의미가 있습니다. –

답변

3

데이타베이스에 익숙하지 않은 분들에게는 상당히 진보 된 주제이지만, 필수 SQLAlchemy (Google Book Search - 122-124 페이지의 핵심 부품을 읽을 수 있으며, 125-126 페이지의 예는 온라인으로 자유롭게 읽을 수 없으며, 따라서 책을 구입하거나 O'Reilly의 Safari과 같은 상용 서비스에서 읽어야합니다. 예를 들어 읽고 싶다면 무료 평가판을 이용하십시오.)

아마도 수직 또는 수평 파티셔닝, 왜 파티셔닝이 필요한지, 그리고 그 목적을 위해 고려하고있는 기본 데이터베이스 엔진이 무엇인지 언급하면 ​​더 나은 답변을 얻을 수 있습니다.

+0

미안, hehe :) 나는 그것이 수직 또는 수평 분할에 관한 것이 아니라고 생각하니? 제 상황은 제가 10 억 개가 넘는 데이터베이스 테이블을 가지고있어서 쿼리와 삽입이 더 빠를 수 있도록이 테이블에 파티션을 만드는 것이 더 낫다고 생각합니다 ... 하지만 사용 방법을 모르겠습니다. 테이블 파티셔닝을위한 sqlalchemy – Ryan

+0

SQL에서 할 수있는 것은 수직 및 수평 파티셔닝 (즉, 행과 열로!)입니다. 오라클과 기타 특정 (일반적으로 상업용) "엔터프라이즈 급"오퍼링은 다른 옵션을 제공 할 수 있습니다. 그러나 사용중인 엔터프라이즈 DB를 전혀 모르는 채로 더 이상 진행할 수 없습니다 (그리고 나서 특정 DB에 특정한 도구를 그것의 비표준 엑스트라를 사용하십시오). –

+0

Btw, "billion levels"은 나에게 아무런 의미가 없다 - 수준이 무엇인가? 10 억 바이트는 아무 것도 아니며 (모든 엔진에서 쉽고 빠르게 처리되며 좋은 색인을 만드십시오!) 10 억 개의 행이 있습니다. 이는 행당 얼마나 많은 데이터가 있느냐에 따라 달라 지지만 분할 할 가치가 있습니다. 데이터를 분별하는 방법은 데이터에 따라 다릅니다 및 관심있는 쿼리. 그것은 진보 된 주제입니다.) SQLAlchemy는 당신의 걱정을 덜어줍니다. –

4

두 가지 파티셔닝이 있습니다 : 수직 파티셔닝과 수평 파티셔닝. docs에서

:

engine1 = create_engine('postgres://db1') 
engine2 = create_engine('postgres://db2') 
Session = sessionmaker(twophase=True) 
# bind User operations to engine 1, Account operations to engine 2 
Session.configure(binds={User:engine1, Account:engine2}) 
session = Session() 

수평 분할

:

수직 분할은

수직 분할은 객체의 다른 종류, 또는 다른 테이블, 여러 데이터베이스에서 배치

가로 분할은 여러 데이터베이스에서 단일 테이블의 행 (또는 테이블 집합)을 분할합니다.

는 당신이 그에 대한 자세한 정보가 필요하면 그냥 바람직하게 수행하려는 작업에 대한 자세한 정보를 제공 물어 attribute_shard.py

에서 "샤딩"예를 참조하십시오.

+0

고맙습니다 .nosklo! 하지만 내가 원하는 것은 데이터베이스 레벨 파티셔닝입니다. – Ryan

+0

좋은 swer, 고마워. –

2

자동 파티션은 매우 데이터베이스 엔진 고유 개념이며 SQLAlchemy는 파티션을 관리하기위한 일반 도구를 제공하지 않습니다. 대부분 다른 API를 배우는 동안 정말 유용한 것을 제공하지 않기 때문입니다. 데이터베이스 레벨 파티셔닝을 수행하려면 사용자 정의 Oracle DDL 문을 사용하여 CREATE TABLE 문을 수행하십시오 (Oracle 문서에서 파티션 된 테이블을 작성하고 데이터를 마이그레이션하는 방법 참조). 일반 테이블을 사용할 때와 마찬가지로 SQLAlchemy에서 분할 된 테이블을 사용할 수 있습니다. SQLAlchemy에서 쿼리 할 항목을 알 수 있도록 테이블 선언 만 있으면됩니다. 데이터베이스의 정의를 반영하거나 SQLAlchemy 코드에서 테이블 선언을 복제 할 수 있습니다.

대용량 데이터 집합은 일반적으로 시간 기반이며 이전 데이터는 읽기 전용 또는 읽기 대부분이되며 쿼리는 일반적으로 시간 간격의 데이터 만 봅니다. 그 데이터를 설명하는 경우, 아마 날짜 필드를 사용하여 데이터를 분할해야합니다.

응용 프로그램을 사용하여 다른 데이터베이스 인스턴스간에 데이터를 분할하는 응용 프로그램 레벨 파티셔닝 또는 샤딩이 있습니다. 엄청난 가격 책정 모델로 인해 오라클 세계에서 인기가있는 것은 아닙니다. 샤딩을 사용하려면 SQLAlchemy 문서와 예제를 참조하십시오. SQLAlchemy가이를 지원할 수있는 방법에 대해서는 알지만 응용 프로그램 레벨 샤딩이 응용 프로그램 코드를 작성하는 방법에 영향을 미친다는 것을 알고 있어야합니다.

+0

Ants에게 감사드립니다. – Ryan

관련 문제