2011-06-10 2 views
6

NoSQL의 경우 NoSQL 위키에 명확한대로 특정 NoSQL 데이터베이스를 선택하는 데 엄청난 수의 선택이 있습니다.MySQL을 대체 할 NoSQL 데이터베이스는 무엇입니까?

내 응용 프로그램에서는 mysql을 NOSQL 대안으로 대체하려고합니다. 내 응용 프로그램에서 나는 많은 다른 테이블과 많은 관계를 가진 사용자 테이블이 있습니다. 이 테이블 중 일부는 차례로 다른 테이블과 관련되어 있습니다. 또한 친구 인 경우 다른 사용자와 연결된 사용자가 있습니다.

저장할 문서가 없으므로 문서 지향 NoSQL 데이터베이스가 필요하지 않습니다. 매우 높은 성능을 원합니다. NOSQL 데이터베이스는 Play Framework 및 스칼라 언어와 잘 작동해야합니다. 오픈 소스이어야하며 무료 여야합니다.

위에서 주어진 NoSQL 데이터베이스는 무엇을 사용해야합니까?

답변

1

이 시점에서 대답은 없음, 두렵습니다.

조인을 사용하여 관계형 모델을 키 - 값 저장소 디자인으로 변환하고이를 1 : 1 매핑으로 기대할 수는 없습니다.당신이 말한 것으로부터 당신은 조인을 가지고있는 것처럼 보이는데, 그것들 중 일부는 반복적입니다. 즉 같은 테이블의 다른 행을 참조합니다.

기존 관계형 스키마를 비정규 화하여 시작하여 달성하려는 디자인에 더 가까이 옮길 수 있습니다. 그런 다음, 수행하려는 작업이 실용적인 방법으로 수행되고 어떤 기술을 선택해야하는지 쉽게 알 수 있습니다. MySQL을 계속 사용하도록 선택할 수도 있습니다. 조인을 할 수 있다고해서 MySQL과 같은 관계형 DBMS에서 비 관계형 디자인을 가질 수 있다는 의미는 아닙니다.

또한 비 관계형 데이터베이스는 성능이 아닌 확장 성을 위해 설계되었습니다! 수천 명의 사용자와 서버 팜이없는 경우 기존 관계형 데이터베이스가 실제로 더 잘 작동 할 수 있습니다.

+2

NoSql과 키 - 값 데이터 저장소를 혼란스럽게합니다. Key-Value 데이터 스토어가 아닌 그래프 데이터베이스 (Neo4J) 및 OO 데이터베이스 (db4o)와 같은 NoSql 데이터베이스가 있습니다. 강력한 관계형 메커니즘을 제공합니다. –

+0

@Vagif : 솔직히 NoSQL (또는 비 관계형)이라는 이름을 싫어합니다. 같은 추론에 따라 SQL이나 관계형이 아니기 때문에 구식 파일 시스템이 NoSQL으로 불릴 수 있다고 생각합니다. OTOH, 당신은 그래프 데이터 스토어에 대해 옳았습니다. 나는 그것에 대해 생각하지 않았습니다. –

+0

글쎄, 우리는 그들이 가지고있는 것보다는 가지고 있지 않은 것에 의해 정의되는 무신론자들을 가지고 있습니다. 종교가 지배하는 세계에서 무신론은 유효한 정의입니다. SQL 데이터베이스에 의해 지배되는 세계에서 NoSql은 의미가 있다고 생각합니다. –

8

"문서 데이터베이스"의 본질을 오해 한 것 같습니다. 따라서, 나는 문서 데이터베이스 인 MongoDB를 추천 할 것이지만 나는 그것을 좋아할 것이라고 생각한다.

MongoDB는 기본적으로 JSON 레코드 인 "문서"를 저장합니다. 차가운 부분은 그것이 저장하는 문서의 내부를 이해한다는 것입니다. 따라서 다음과 같은 문서가 주어집니다.

{ 
    "name": "Gregg", 
    "fave-lang": "Scala", 
    "fave-colors": ["red", "blue"] 
} 

"fave-lang"또는 "fave-colors"에 대해 쿼리 할 수 ​​있습니다. 관계형 영역에서 다 대다를 필요로하는 배열 "fave-colors"조차도 해당 필드 중 하나에서 색인을 생성 할 수도 있습니다.

Play는 내가 사용하지 않은 MongoDB 플러그인을 제공합니다. Casbah driver for MongoDB을 사용할 수도 있는데, 나는 많은 것을 사용했고 훌륭합니다. FourSquare가 작성한 Rogue MongoDB에 대한 DSL 쿼리는 MongoDB를 원한다면 살펴볼 가치가 있습니다.

MongoDB는 매우 빠릅니다. 또한 어떤 레코드라도 원하는 모든 필드를 가질 수 있기 때문에 스키마 작성의 번거 로움을 덜어 주며 검색 가능하고 인덱싱 할 수 있습니다. 데이터 모델은 사용자와 "컬렉션"(테이블 같은) 및 필요에 따라 사용자 ID를 참조하는 레코드가있는 다른 컬렉션을 사용하여 지금과 매우 비슷하게 보입니다. 그러나 컬렉션 중 하나에 필드를 추가해야하는 경우 이전 레코드 또는 데이터 마이그레이션에 대한 걱정없이 언제든지 필드를 추가 할 수 있습니다. 기술적으로 MongoDB 레코드에 대한 스키마는 없지만 유사한 레코드를 컬렉션으로 구성하게됩니다.

MongoDB는 지난 몇 년 동안 내가 만난 가장 재미있는 기술 중 하나입니다. 그 1 개의 행복한 토요일에 나는 그것을 조사하기로 결정했다. 그리고 15 분 이내에 생산적이었고, 내가 "얻었던"것처럼 느꼈다. 저는 일상적으로 MongoDB와 스칼라를 15 분 만에 시작할 수있는 방법을 보여주는 직장에서 데모를 제공합니다. 여기에는 MongoDB 설치가 포함됩니다. http://janxspirit.blogspot.com/2011/01/quick-webb-app-with-scala-mongodb.html

당신은 적어도 나 시작있어 무엇 http://try.mongodb.org

로 이동한다 : 당신이 웹 서비스에 있다면 뻔뻔한 플러그, 여기 MongoDB를하고 Scalatra가 카스바를 사용하여 시작하기에 내 블로그 게시물입니다.

행운을 빈다.

+0

감사합니다. mongodb는 하나의 사용자 객체가 다른 사용자 객체의 친구이고 하나가 많은 관계와 같은 관계로 사용될 수 있습니까? – ace

+0

예, 한 개체에서 다른 개체로 연결하는 일반적인 형식이 있지만 직접 링크를 따라야합니다. 관계형 데이터베이스와 같은 조인은 없습니다. –

2

흠, 매우 높은 순회 성능을 원하고 "친구"라는 단어를 사용합니다. 가장 먼저 떠오르는 것은 그래프 데이터베이스입니다. 그들은이 정확한 경우를 위해 특별히 제작되었습니다.

이 Neo4j http://neo4j.org/

그건 무료, 오픈 소스 시도뿐만 아니라 상업 지원 및 상업용 라이센스를 가지고, 훌륭한 문서를 가지고 있으며, 많은 언어 (REST 인터페이스)에서 액세스 할 수 있습니다.

자바로 작성되었으므로 네이티브 라이브러리가 있거나 java/scala 앱에 embedd 할 수 있습니다.

+0

이 통찰력에 감사드립니다. 내 프로젝트가 오픈 소스가 아니어도 neo4j가 상업적으로 무료인지 알려주실 수 있습니까? 이것은 그들의 웹 사이트에서 명확하지 않았다. – ace

+0

예. 신청서가 회사 내부 용일 경우 무료입니다. 그러나 웹에서 고객에게 서비스를 제공하는 경우 코드를 소스로 열거 나 상용 라이센스를 구매해야합니다. –

0

MongoDB 또는 Cassendra와 관련하여 (2016 년 12 월, 5 년 늦음) longevityframework.org을 사용해보십시오.

사례 클래스, 컴패니언 개체, 옵션 및 변경 불가능한 컬렉션과 같은 표준 스칼라 관용구를 사용하여 도메인 모델을 작성하십시오. 모델의 유형을 알려 주시고 우리는 지속성을 제공합니다.

John Sullivan에서 "More Longevity Awesomeness with Macro Annotations!"을 참조하십시오.
그는 example on GitHub을 제공합니다.

이전에 장수를 보았 더라면 도메인 객체를 지속하기가 얼마나 쉬워 졌는지 놀라실 것입니다. 그리고 가장 중요한 부분은 관련된 모든 지속성이 주석에 숨어 있다는 것입니다. 도메인 클래스는 영속성에 대한 염려가 전혀 없으며 도메인 모델을 완벽하게 표현하고 응용 프로그램의 모든 부분에서 사용할 준비가되었습니다.

관련 문제