2010-12-01 9 views
10

12 개의 표준 관계형 테이블 (예 : SQLite 또는 PostgreSQL)에 대해 SQL 데이터베이스에 연결된 SQLAlchemy를 사용하는 방법을 배우고 있습니다. 그렇지만 저는 Redis의 빠른 세트 조작과 관련하여 Python에서 Redis를 사용하여 두 가지 테이블을 사용하고 싶습니다. 나는 Redis가 NoSQL이라는 것을 알았지 만 SQLAlchemy가 가지고있는 세션 및 스레드 처리를 위해 SQLAlchemy와이를 통합 할 수 있습니까?Redis를 SQLAlchemy와 통합하는 방법

Redis SA 방언이 있습니까? 나는 그것을 찾을 수 없었다. 아마도 나는 어떤 기본 점을 놓치고 있다는 것을 의미한다. 두 가지 유형의 데이터베이스를 사용하기 위해 살펴 봐야 할 더 나은 아키텍처가 있습니까?

+0

사용 사례는 무엇입니까? –

답변

13

데이터를 다시 저장하는 ORM을 설정할 수도 있지만 특히 좋은 생각은 아닙니다. ORM은 표준 SQL 기능을 제공하도록 설계되었습니다. 임의의 열에 대한 질의와 같은 SQL의 표준 인 많은 것들은 많은 추가 작업을하지 않는 한 redis에서 사용할 수 없습니다. 동시에 redis에는 표준 SQL에는 없으므로 ORM에서 사용하지 않을 집합 조작과 같은 기능이 있습니다.

가장 적합한 옵션은 부적절한 추상화를 사용하지 말고 redis와 직접 상호 작용하는 코드를 작성하는 것입니다. 일반적으로 데이터를 재귀 적으로 가져 오는 코드는 SQL 코드보다 훨씬 간단합니다. ORM을 사용하는 것을 정당화합니다.

9

Redis는 키 값을 저장하고 간단한 원자로 작업을 수행하는 데 매우 뛰어나지 만, 관계형 데이터베이스로 사용하고 싶다면 정말 좋아질 것입니다!, 그리고 여기에 ... 내 이야기입니다 ...

저는 여러 가지 객체를 생성하여 모든 객체를 하나의 프리미티브 쿼리 (내 필터에서 필터라고 함)를 노출하고, 설정하고, 업데이트하고, 훨씬 더 많은 메소드를 추상화하도록했습니다. ORM에서 기대할 수있는 것은 사실이며 로컬 호스트만을 다루는 경우에는 응용 프로그램의 속도가 느려지지 않을 것이므로 관계형 데이터베이스로 redis를 사용할 수 있지만 언제든지 데이터베이스를 다른 것으로 이동하려고하면 호스트, 그게 네트워크 전송 측면에서 많은 문제를 나타냅니다, 나는 끝redis와 그의 파이프를 사용하여 다시 해킹 된 클래스를 사용하면 내 프로그램을 로컬 네트워크에서 사용할 수있게 해주는 속도가 900 % 빨라지고 어쨌든 데이터베이스 라이브러리를 포스트그레스로 옮기기 시작합니다.

이 역사의 교훈은 키 값 모델을 사용하여 관계형 데이터베이스를 만들지 않으려 고하는 것이고 기본 작업에서는 훌륭하게 작동하지만 서버에 관계를 만들 수있는 가격이 인 경우에는 높은 비용이 부과됩니다 .

질문으로 돌아가서, 나는 redis를 위해 sqlalchemy에 어댑터를 만드는 프로젝트를 모른다. 그리고 나는 각 프로젝트의 성격 때문에 아무도 그와 같은 것에 정말로 관심이 없을 것이라고 생각한다.

+2

+1, 내 이야기를 말하기 위해 :( – Behrooz