복붙노트

[MONGODB] 때 레디 스에? 때 MongoDB를에? [닫은]

MONGODB

때 레디 스에? 때 MongoDB를에? [닫은]

내가 원하는 레디 스 및 MongoDB를 사이에 비교되지 않습니다. 나는 그들이 다른 알고; 성능과 API는 완전히 다르다.

레디 스 매우 빠르게이지만, API는 매우 '원자'입니다. MongoDB를 더 많은 자원을 먹을 것이다,하지만 API는 아주 아주 쉽게 사용할 수, 나는 그것을 매우 기쁘게 생각합니다.

그들은 둘 다 멋진있어, 나는 내가 할 수있는만큼 배포 레디 스를 사용하고자하지만, 코드 어렵다. 나는만큼 내가 할 수있는 개발하여 MongoDB를 사용하고자하지만, 고가의 장비를 필요로한다.

그래서 당신은 둘 다의 사용에 대해 어떻게 생각하십니까? 때 레디 스를 선택하려면? 때 MongoDB의를 선택하는?

해결법

  1. ==============================

    1.내가 dev에 당신이 팀과 애플리케이션 요구의 종류에 따라 달라 말할 것입니다.

    내가 dev에 당신이 팀과 애플리케이션 요구의 종류에 따라 달라 말할 것입니다.

    당신은 쿼리를 많이 필요로하는 경우 예를 들어, 그 대부분의 개발자는 데이터가 효율성을 위해 각 개체 유형에 맞게 사용자 정의 전문 데이터 구조의 다양한 저장 될 수 레디 스를 사용하는 것이 더 많은 작업을 것을 의미한다. 구조가 데이터를 일관되게 적용하기 때문에 MongoDB를에서 같은 쿼리는 쉬울 수 있습니다. 반면에, 레디 스에서, 그 쿼리에 대한 응답의 깎아 지른듯한 속도는 데이터가 함께 저장 될 수있는 구조의 다양한 처리하는 추가 작업에 대한 보수이다.

    MongoDB를 제공 단순, 기존의 DB와 SQL 경험을 가진 개발자를위한 훨씬 짧은 학습 곡선. 그러나 레디 스의 비 전통적인 접근 방식은 배울 수있는 더 많은 노력하지만, 더 큰 유연성을 필요로한다.

    예. 캐시 층은 아마도 더 나은 레디 스에서 구현 될 수있다. 더 스키마 할 데이터의 경우, MongoDB를 더합니다. [참고 : MongoDB를 모두 레디 스 및 기술적 스키마이다]

    당신이 저를 요구하는 경우에, 내 개인적인 선택은 대부분의 요구 사항에 대한 레디 스입니다.

    마지막으로, 지금 당신이 본에 의해 희망 http://antirez.com/post/MongoDB-and-Redis.html

  2. ==============================

    2.난 그냥이 질문은 매우 오래된 것으로 나타났습니다. 그럼에도 불구하고, 나는 가치가 추가 될하기 위해 다음과 같은 측면을 고려 :

    난 그냥이 질문은 매우 오래된 것으로 나타났습니다. 그럼에도 불구하고, 나는 가치가 추가 될하기 위해 다음과 같은 측면을 고려 :

    TL; DR - 사용 레디 스 성능이 중요하다면 당신은 최적화하고 데이터를 정리 시간을 지출 할 수 있습니다. - 사용 MongoDB를 당신이 당신의 DB에 대해 너무 많이 걱정없이 프로토 타입을 구축해야합니다.

    추가 읽기 :

  3. ==============================

    3.레디 스. 의 당신이 PHP에서 사이트를 작성했습니다 가정 해 봅시다; 어떤 이유, 그것은 인기가되고 그것은 앞서 시간의 나에 포르노가 있습니다. 당신은 "그들은 단순히 페이지 10 초 동안 대기하지 않기 때문에 내 팬을 잃을거야."이 PHP가 너무 느려 괴물이되어 실현 당신은 웹 페이지, (이 절대 변경, 워) 일정한 URL을 가지고 갑자기 실현이 기본 키는 것, 다음은 디스크가 느리고 PHP도 느립니다 동안 그 메모리가 빠르고 기억 경우. :( 그럼 당신은 메모리와 당신이 전화를 결정하는 웹 페이지의 콘텐츠 동안 "키"부르는 URL을 사용하여 저장 메커니즘 패션 그건 당신이 가진 전부 "값입니다."-. 키 및 콘텐츠 당신은 "캐시 밈."호출 .... 그가 끝내이기 때문에 리처드 도킨스 (Richard Dawkins) 같은 당신은 당신은 그럼 당신은 다른 사람이 일을 한 것을 볼 당신은 행복 당신은 당신의 쓰레기 PHP 코드를 다시 작성할 필요가 없습니다 다람쥐처럼 HTML이 자신의 너트를 캐시 캐시 -하지만 당신은 때문에 레디 스를 선택 다른 하나는 고양이의 혼란 이미지, 송곳니 몇 가지가 있습니다.

    레디 스. 의 당신이 PHP에서 사이트를 작성했습니다 가정 해 봅시다; 어떤 이유, 그것은 인기가되고 그것은 앞서 시간의 나에 포르노가 있습니다. 당신은 "그들은 단순히 페이지 10 초 동안 대기하지 않기 때문에 내 팬을 잃을거야."이 PHP가 너무 느려 괴물이되어 실현 당신은 웹 페이지, (이 절대 변경, 워) 일정한 URL을 가지고 갑자기 실현이 기본 키는 것, 다음은 디스크가 느리고 PHP도 느립니다 동안 그 메모리가 빠르고 기억 경우. :( 그럼 당신은 메모리와 당신이 전화를 결정하는 웹 페이지의 콘텐츠 동안 "키"부르는 URL을 사용하여 저장 메커니즘 패션 그건 당신이 가진 전부 "값입니다."-. 키 및 콘텐츠 당신은 "캐시 밈."호출 .... 그가 끝내이기 때문에 리처드 도킨스 (Richard Dawkins) 같은 당신은 당신은 그럼 당신은 다른 사람이 일을 한 것을 볼 당신은 행복 당신은 당신의 쓰레기 PHP 코드를 다시 작성할 필요가 없습니다 다람쥐처럼 HTML이 자신의 너트를 캐시 캐시 -하지만 당신은 때문에 레디 스를 선택 다른 하나는 고양이의 혼란 이미지, 송곳니 몇 가지가 있습니다.

    몽고. 당신은 사이트를 서면으로 작성했습니다. 지옥 당신은 많은 작성 및 언어했습니다. 당신은 당신의 시간의 대부분은 그 악취의 SQL 절을 작성 소요되는 것으로 알고 있습니다. 당신은 DBA하지 않은, 그러나 당신은 ... 그냥 하나를 바보 SQL 문을 작성하지만 사방에 괴물이있다. "저를 선택,이 옵션을 선택". 그러나 특히 당신은 WHERE 자극적 절을 기억한다. 어디 LASTNAME는 "손튼"동일과 영화 같다 "나쁜 산타를." Urgh. "그 DBA가 단지 자신의 일을하고 좀 저장 프로 시저를 제공하지 않는 이유는 무엇입니까?"당신은, 생각 그럼 당신은 가운데 이름과 같은 몇 가지 사소한 필드를 잊고 다음은 테이블을 삭제 수출 모든 10G를 빅 데이터의이 새로운 분야로 서로를 생성하고 데이터를 가져와야합니다 - 그것은 당신과 14 일 동안 10 회에 간다 인사말, 제목 등의 쓰레기를 기억 플러스 주소와 외부 키를 계속 추가. 그럼 당신은 LASTNAME이이 lastName해야한다는 그림. 거의 하나는 일을 변경합니다. 그럼 당신은 darnit을 말한다. 내가 타고 웹 사이트 / 시스템 쓰기,이 데이터 모델 학사을 신경 쓰지해야합니다. 당신이 구글 그래서, "나는, 제발 아무 SQL, 그것은 중지 할 SQL을 쓰기 싫어"하지만 아빠 '되는 NoSQL'까지 당신은 몇 가지 물건을 읽고는 그냥 스키마없이 데이터를 덤프 말한다. 당신은 지난 주 실패가 더 테이블과 미소를 삭제 기억한다. 그럼 당신은 때문에 몇 가지 큰 사람 'airbud'는 APT 임대 사이트 사용 그것 같이 몽고를 선택합니다. 단. 방금 변경에 계속 모델을 가지고 있기 때문에 더 이상 데이터 모델은 변경되지 않습니다.

  4. ==============================

    4.어쩌면이 자원은 유용한 도움의 두 사이에서 결정된다. 또한 여러 가지 다른되는 NoSQL 데이터베이스를 설명하고 함께 특성의 짧은 목록을 제공하는 그들 각각에 대한 설명은 "나는 그것을 사용하는 것이 무엇인지".

    어쩌면이 자원은 유용한 도움의 두 사이에서 결정된다. 또한 여러 가지 다른되는 NoSQL 데이터베이스를 설명하고 함께 특성의 짧은 목록을 제공하는 그들 각각에 대한 설명은 "나는 그것을 사용하는 것이 무엇인지".

    http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

  5. ==============================

    5.대답하기 어려운 질문 - 대부분의 기술 솔루션과 마찬가지로, 정말 상황에 따라 달라집니다 당신이 기술을 갖고 있지 않기 때문에 당신이 해결하려고하는 문제는 어떻게 누군가는 해결책을 제안?

    대답하기 어려운 질문 - 대부분의 기술 솔루션과 마찬가지로, 정말 상황에 따라 달라집니다 당신이 기술을 갖고 있지 않기 때문에 당신이 해결하려고하는 문제는 어떻게 누군가는 해결책을 제안?

    당신은 당신의 요구를 만족 그들 중 어떤보고 모두를 테스트해야합니다.

    그렇게 말한다면, MongoDB를 어떤 고가의 하드웨어를 필요로하지 않습니다. 다른 데이터베이스 솔루션과 마찬가지로, 그것은 더 많은 CPU 및 메모리와 더 잘 작동하지만 요구 사항은 분명하지 않다 - 특히 초기 개발 목적.

  6. ==============================

    6.레디 스는 메모리 데이터 저장소, 즉 (재시동 후의 회복을 가능하게) 디스크로의 상태를 유지할 수있다. 그러나, 인 - 메모리 데이터 저장 장치 인 시스템은 (물리적 RAM + 스왑 공간)의 전체 메모리 용량을 초과 할 수있다 (단일 노드의) 데이터 저장소의 크기를 의미한다. 레디 스 시스템에 많은 다른 프로세스와 그 공간을 공유하는 같은 현실에서, 그것은 훨씬 덜이 그 것이며,이 시스템의 메모리 공간을 소모하는 경우는 가능성이 운영 체제에서 떨어져 사망한다.

    레디 스는 메모리 데이터 저장소, 즉 (재시동 후의 회복을 가능하게) 디스크로의 상태를 유지할 수있다. 그러나, 인 - 메모리 데이터 저장 장치 인 시스템은 (물리적 RAM + 스왑 공간)의 전체 메모리 용량을 초과 할 수있다 (단일 노드의) 데이터 저장소의 크기를 의미한다. 레디 스 시스템에 많은 다른 프로세스와 그 공간을 공유하는 같은 현실에서, 그것은 훨씬 덜이 그 것이며,이 시스템의 메모리 공간을 소모하는 경우는 가능성이 운영 체제에서 떨어져 사망한다.

    몽고는 세트 맞는 물리적 RAM 내에서 (모든 소프트웨어 등) 일 때 가장 효율적인 디스크 기반 데이터 저장소입니다. 디스크 기반 데이터 수단 인 특정 한도 이상의 데이터베이스 크기가 비현실적 또는 비효율적이 될 수 있다는 것을 의미 아니요 몽고 데이터베이스의 크기에 본질적인 한계, 그러나 구성 옵션, 사용 가능한 디스크 공간 및 기타 문제가 없습니다.

    레디 스 및 몽고 모두 고 가용성, 백업을 위해 클러스터링 할 수 및 데이터 저장소의 전체 크기를 증가 할 수 있습니다.

  7. ==============================

    7.(이 글을 쓰는 시점에서) 답변의 모든 레디 스, MongoDB를 각 가정, 그리고 아마도 SQL 기반의 관계형 데이터베이스는 기본적으로 동일한 도구입니다 : "데이터를 저장". 그들은 모두에서 데이터 모델을 고려하지 않는다.

    (이 글을 쓰는 시점에서) 답변의 모든 레디 스, MongoDB를 각 가정, 그리고 아마도 SQL 기반의 관계형 데이터베이스는 기본적으로 동일한 도구입니다 : "데이터를 저장". 그들은 모두에서 데이터 모델을 고려하지 않는다.

    MongoDB의 문서 저장소입니다. 는 SQL 기반 관계형 데이터베이스와 비교하기 : 관계형 데이터베이스 인덱싱 된 CSV 파일을 간단하게, 테이블에있는 각 파일; 문서 저장소는 여러 파일이 그룹화 된 각 파일은 문서 인, JSON 인덱스 파일을 단순화.

    JSON 파일은 XML 및 YAML 파일 구조가 유사하고, 파이썬 등 사전에, 그래서 계층 구조의 종류에 데이터 생각합니다. 인덱싱, 구조가 중요한 경우 : 문서 중 하나를 더 문서, 배열, 또는 스칼라 값을 포함라는 이름의 키를 포함하고 있습니다. 아래의 문서를 생각해 보자.

    {
      _id:  0x194f38dc491a,
      Name:  "John Smith",
      PhoneNumber:
        Home: "555 999-1234",
        Work: "555 999-9876",
        Mobile: "555 634-5789"
      Accounts:
        - "379-1111"
        - "379-2574"
        - "414-6731"
    }
    

    상기 문서 (555) 634-5789 값을 갖는 키 PhoneNumber.Mobile를 갖는다. 당신은 키 PhoneNumber.Mobile는 어떤 값을 가지는 문서의 컬렉션을 검색 할 수 있습니다; 그들은 색인이 있습니다.

    또한 여러 인덱스를 보유 계정의 배열을 가지고있다. 이 값의 일부 하위 집합, 계정 정확하게 값의 일부 하위 집합을 포함하는 문서에 대한 값의 일부 부분 집합의 모든, 또는를 조회 할 수 있습니다. 즉, 당신이 계정을 검색 할 수 = [ "379-1111", "379-2574"]이 아니라 위의를 찾을 수; 계정을 검색 할 수 있습니다 당신은 [ "379-1111"]와 위의 문서를 찾을 포함; 당신은 계정에 대한 [ "974-3785"는 "414-6731"]와 위 어떤 문서를 찾을 계정 "974-3785"를 포함하고의 (있는 경우)이 포함되어 검색 할 수 있습니다.

    당신이 원하는대로 문서 깊이로 이동합니다. PhoneNumber.Mobile도 하위 문서 (PhoneNumber.Mobile.Work 및 PhoneNumber.Mobile.Personal)를 어레이를 길게하거나 할 수있다. 데이터가 매우 구조화되어있는 경우, 문서는 관계형 데이터베이스에서 큰 단계까지입니다.

    데이터가 대부분 평면, 관계, 그리고 엄격하게 구조화 된 경우, 당신은 더 나은 관계형 데이터베이스와 길 이죠. 다시 말하지만, 큰 기호입니다 여부를 상호 CSV 파일의 수집 또는 XML / JSON / YAML 파일의 컬렉션에 가장 데이터 모델.

    대부분의 프로젝트의 경우, 중 SQL 또는 문서 저장이 맞지 않는 일부 작은 영역에서 해결 방법 미성년자를 수용, 타협해야 할 것이다; 데이터의 광범위한 보급 (많은 열, 행 무관)를 저장 약간 크고 복잡한 프로젝트를 들어, 또 다른 모델의 어떤 하나 개의 모델의 데이터와 다른 데이터를 저장하는 것은 의미한다. 한국어 모두 SQL 및 그래프 데이터베이스 (데이터 노드에 투입하고, 노드가 다른 노드에 연결되는 경우)를 사용한다; 크레이그리스트는 MySQL과 MongoDB를를 사용하는 데 사용하지만, MongoDB를로 완전히 이동에보고했다. 이 하나 개의 모델에서 넣을 경우 데이터의 범위와 관계가 상당한 장애에 직면 장소입니다.

    레디 스, 대부분 기본적으로 키 - 값 저장소입니다. 레디 스 당신이 그것에게 키를주고 하나의 값을 조회 할 수 있습니다. 자체 문자열,리스트, 해시, 그리고 몇 가지 다른 일을 저장할 수 있습니다 레디 스; 그러나, 그것은 단지 이름을 찾습니다.

    캐시 무효화는 컴퓨터 과학의 어려운 문제 중 하나입니다; 다른 하나는 사물의 이름을 지정합니다. 그 말 백 엔드에 과잉보기 업의 수백을 피하려고 할 때 레디 스를 사용합니다,하지만 당신은 당신이 새로운 룩업을 필요로 할 때 파악해야합니다.

    무효의 가장 눈에 띄는 경우가 쓰기에 대한 업데이트입니다 : 사이먼 : 당신이 사용자 읽으면 lingots = NOTFOUND을, 당신은 가입 스토어의 INNER로부터 Lingots을 선택 USERPROFILE U ON s.UserID = u.UserID WHERE u.Username = 사이먼과를 저장할 수 있습니다 SET 사용자로, 100을 결과 : 시몬 : 당신은 시몬에게 5 lingots을 수여 할 때 lingots는 (100) 그런 다음, 사용자 읽기 = 사이먼 : lingots = 100, SET 사용자 : 사이먼 : lingots = (105), 및 UPDATE 스토어의 INNER가 USERPROFILE U ON 가입 s.UserID = u.UserID SET s.Lingots = 105 WHERE u.Username = 사이먼. 지금 당신은 당신의 데이터베이스와 레디 스에서 (105)를 가지고 있고, 사용자를 얻을 수 있습니다 : 사이먼 : lingots 데이터베이스를 쿼리하지 않고.

    두 번째 경우는 종속 정보를 갱신한다. 하자 당신은 페이지의 덩어리를 생성하고 자신의 출력을 캐시 말한다. 헤더 쇼 플레이어의 경험 수준 및 금액; 플레이어의 프로필 페이지는 통계를 표시하는 블록이있다; 기타 등등. 플레이어는 경험을 얻는다. 헤더 : 사이먼, 템플릿 : StatsBox : 사이먼, 템플릿 : GrowthGraph : 자, 이제 당신은 몇 가지 템플릿이 시몬, 등은 쿼리 템플릿 엔진을 통해 실행 대여섯 데이터베이스의 출력을 캐시 한 경우 필드. 당신이이 페이지를 표시 할 때 일반적으로, 당신은 말한다 :

    $t = GetStringFromRedis("templates:StatsBox:" + $playerName);
    if ($t == null) {
      $t = BuildTemplate("StatsBox.tmpl",
                         GetStatsFromDatabase($playerName));
      SetStringInRedis("Templates:StatsBox:" + $playerName, $t);
    }
    print $t;
    

    당신의 키 - 값 캐시에서 사이먼 : * : 당신은 그냥 GetStatsFromDatabase ( "시몬")의 결과를 업데이트하기 때문에, 당신은 템플릿을 삭제해야합니다. 당신이 이러한 템플릿 중 하나를 렌더링 할 때 응용 프로그램이 데이터베이스 (PostgreSQL을, MongoDB를)에서 데이터를 가져 오는 및 템플릿에 삽입 우왕좌왕 할 것이다; 그것은 희망, 데이터베이스 쿼리를 만들고 템플릿을이 출력의 블록을 표시하는 다음 렌더링 시간을 귀찮게하지, 레디 스에 결과를 저장합니다.

    레디 스 또한 메시지 큐 등을 게시자가 구독 할 수 있습니다. 그건 완전히 다른 주제입니다. 포인트는 여기 레디 스에 키 - 값 캐시, 관계형 데이터베이스 또는 문서 저장소에서 다르다입니다.

    사용자의 필요에 따라 도구를 선택하십시오. 그 코드가 얼마나 복잡하고 오류가 발생하기 쉬운 결정으로 가장 큰 필요는, 일반적으로 데이터 모델이다. 전문 애플리케이션 성능, 당신은 C와 어셈블리의 혼합물에서 모든 것을 쓰기 장소에 의지 할 것이다; 대부분의 응용 프로그램은 일반화 된 사건을 처리하고 훨씬 빨리 고성능 SQL 데이터베이스 또는 문서 저장소 중 하나보다 같은 레디 스 또는 Memcached가 같은 캐싱 시스템을 사용합니다.

  8. ==============================

    8.당신이 충분한 RAM이있는 경우 그리고 당신은 어느 쪽도 사용할 수 없습니다. 레디 스 및 MongoDB를 일반적인 목적의 도구의 가격에 온다. 이것은 많은 오버 헤드를 소개합니다.

    당신이 충분한 RAM이있는 경우 그리고 당신은 어느 쪽도 사용할 수 없습니다. 레디 스 및 MongoDB를 일반적인 목적의 도구의 가격에 온다. 이것은 많은 오버 헤드를 소개합니다.

    레디 스 10 배 빠른 몽고보다 그 말이 있었다. 즉 더 이상 그 진실하지 않을 수 있습니다. MongoDB의 (나는 올바르게 기억) 기억 긴 메모리 구성이 동일한 것처럼 문서 캐싱 Memcache를 이길 항.

    아무리 해도. 레디 스 좋은, MongoDB를이 좋다. 당신은 하부 구조 및 필요 집계 신경 경우 MongoDB를위한 이동합니다. 키와 값을 저장하면 주요 관심사 레디 스에 대한 그 모든 경우. (또는 임의의 다른 키 값을 저장).

  9. ==============================

    9.레디 스 및 MongoDB를 모두 비 관계형 데이터베이스입니다하지만 그들은 서로 다른 범주의입니다.

    레디 스 및 MongoDB를 모두 비 관계형 데이터베이스입니다하지만 그들은 서로 다른 범주의입니다.

    레디 스는 키 / 값 데이터베이스입니다, 그것은 매우 빨리하게 인 - 메모리 스토리지를 사용하고. 그것은 물건과 (메모리) 임시 데이터 저장을 캐싱에 대한 좋은 후보이고 당신이 당신의 컴퓨터에서 사용할 거라면 그것을 지원 (예 : 푸른, AWS)를 클라우드 플랫폼의 가장으로, 그것의 메모리 사용량이 scalable.But입니다 한정된 자원은, 그것의 메모리 사용을 고려한다.

    MongoDB를 반면에, 문서 데이터베이스입니다. 그것은 좋은 등 큰 텍스트, 이미지, 비디오를 유지하는 옵션을 선택하고 블로그 나 소셜 네트워크를 개발하고 싶은 경우 transactions.For 예를 제외하고 데이터베이스와는 거의 아무것도이다, MongoDB를 적당한 선택이다. 그것은 스케일 아웃 (scale-out) 전략과 확장 성입니다. 그것은 저장 매체로 디스크를 사용하므로 데이터가 지속 될 것이다.

  10. ==============================

    10.대답은 레디 스입니다 - 프로젝트가 조금 움직 경우 사용자의 환경에 충분한 RAM 메모리를 가지고 있습니다. 특히 클러스터 기능을 가진 레디 스 3.2 새로운 계정에 복용.

    대답은 레디 스입니다 - 프로젝트가 조금 움직 경우 사용자의 환경에 충분한 RAM 메모리를 가지고 있습니다. 특히 클러스터 기능을 가진 레디 스 3.2 새로운 계정에 복용.

  11. from https://stackoverflow.com/questions/5400163/when-to-redis-when-to-mongodb by cc-by-sa and MIT license