소기업 고객을위한 웹 기반 Clojure 애플리케이션으로 VB 기반 온 프레미스 (로컬로 설치된) 애플리케이션 (인보이스 + 인벤토리)을 다시 작성하려고합니다. 비슷한 거래를하는 고객을 위해 SaaS 애플리케이션으로 제공하고자합니다.
나는 데이터베이스 옵션을보고 있었다 : 나의 선택은 RDBMS : Postgresql / MySQL이었다. 첫 해에는 최대 400 명의 사용자로 확장 할 수 있으며 일반적으로 사용자 당 하루 20-40 페이지의 페이지 뷰 / 정적 뷰가 아닌 트랜잭션의 경우입니다. 각보기에는 데이터 가져 오기 및 데이터 업데이트가 포함됩니다. ACID 준수가 필요합니다 (또는 그렇게 생각합니다). 따라서 거래량은 크지 않습니다.
내 선호도에 따라 이들 중 하나를 선택하는 것은 쉬운 일이 아니지만 SaaS 앱의 전형적인 요구 사항 인이 하나의 요구 사항에 대해 다음과 같습니다. 고객 / 사용자를 추가하고 각 고객의 고객을 추가하면 스키마가 변경됩니다 변화하는 비즈니스 요구 사항 DB 전문가가 아니기 때문에 내가 생각하고 읽은 내용에 따라 여러 가지 방법으로 처리 할 수 있습니다.
- 여러 테넌트를 호스팅하는 단일 DB를 사용하여 MySQl / Postgresql에서 전통적인 RDBMS 스키마 설계를 갖습니다. 또한 고객을 더 추가하거나 기존 고객에 대한 변경을 추가 할 수 있도록 각 테이블에 충분한 "부동"열을 추가하십시오. 스키마가 약간 변경 될 때마다 변경 사항이 DB에 전파되는 단점이있을 수 있습니다. Postgresql 스키마에서 잠금없이 실시간으로 업데이트 할 수 있다는 것을 읽었습니다. 그러나이 유스 케이스에서 얼마나 고통 스럽거나 실용적인지 확실하지 않습니다. 또한 스키마 변경으로 인해 새로운 / 사소한 SQL 변경도 발생할 수 있습니다.
- RDBMS를 보유하고 있지만 엔터티 속성 값에 가깝거나 키-값 저장소와 같이 유연한 방식으로 데이터베이스 스키마를 설계하십시오. (예 : Workday, FriendFeed)
- 전체 내용을 메모리로 객체로 보관하고 주기적으로 로그 파일에 저장하십시오 (예 : edval, lmax).
- MongoDB 또는 Redis와 같은 NoSQL DB로 이동하십시오. 그러나 내가 수집 할 수있는 내용에 따라이 사용 사례에는 적합하지 않으며 ACID와 완전히 호환되지 않습니다.
- SQL 및 ACID 호환 동작을 유지하고 "새로운"RDBMS 인 VoltDb 또는 JustoneDb (클라우드 기반)와 같은 NewSQL Dbs를 사용하십시오.
- neo4j (graphdb)를 보았지만이 유스 케이스에 맞는지 확실하지 않습니다.
필자는 유스 케이스에서 확장 성 또는 분산 컴퓨팅 이상의 "스키마 유연성 + ACID + 합리적인 성능"을 달성하는 더 좋은 방법을 찾고 있습니다. 인터넷에서 찾을 수있는 대부분의 기사는 스키마의 유연성에 대해 설명합니다 (NoSQL DB의 경우) 성능 및 확장 성으로 인해 ACID / 트랜잭션 측면을 제외합니다.
이것이 '스키마 유연성 대 ACID'트랜잭션의 "또는"사례입니까, 아니면 더 나은 방법이 있습니까?