programing

레디스를 사용한 MongoDB

iphone6s 2023. 2. 21. 23:32
반응형

레디스를 사용한 MongoDB

Redis와 MongoDB를 함께 사용하면 어떤 이점을 얻을 수 있는지 예를 들어 주시겠습니까?

Redis와 MongoDB를 병용하여 좋은 결과를 얻을 수 있습니다.MongoDB 및 Redis(MySQL 및 Sphinx와 함께)를 운영하는 것으로 유명한 회사는 Craiglist입니다.Jeremy Zawodny의 프레젠테이션을 보십시오.

MongoDB는 다양한 방법으로 영구적이고 문서 지향적이며 인덱싱된 데이터에 관심이 있습니다.Redis는 휘발성 데이터 또는 지연에 민감한 반영구 데이터에 더 적합합니다.

다음은 MongoDB 위에 Redis를 구체적으로 사용한 몇 가지 예입니다.

  • 2.2 이전 MongoDB에는 아직 유효기간 메커니즘이 없습니다.상한 컬렉션은 실제 TTL을 구현하기 위해 실제로 사용할 수 없습니다.Redis에는 TTL 기반의 유효기간 메커니즘이 있어 휘발성 데이터를 편리하게 저장할 수 있습니다.예를 들어 사용자 세션은 일반적으로 Redis에 저장되며 사용자 데이터는 MongoDB에 저장 및 인덱싱됩니다.MongoDB 2.2에는 수집 수준에서 낮은 정확도의 유효기간 메커니즘이 도입되어 있습니다(예를 들어 데이터 삭제에 사용).

  • Redis는 편리한 집합 데이터 유형과 관련 작업(연합, 교차점, 다중 집합의 차이 등)을 제공합니다.이 기능 위에 기본 검색 또는 태그 엔진을 구현하는 것은 매우 쉽습니다. 이는 MongoDB의 기존 인덱싱 기능에 흥미로운 추가 기능입니다.

  • Redis는 목록에 대한 효율적인 차단 팝 작업을 지원합니다.이를 사용하여 애드혹 분산 큐잉시스템을 구현할 수 있습니다.백엔드 애플리케이션은 타임아웃으로 여러 큐를 수신하거나 항목을 다른 큐로 아토믹하게 전송할 수 있기 때문에 MongoDB 맞춤 커서 IMO보다 유연합니다.애플리케이션에 큐잉이 필요한 경우 큐를 Redis에 저장하고 영속적인 기능 데이터를 MongoDB에 유지하는 것이 좋습니다.

  • Redis는 펍/서브 메커니즘도 제공합니다.분산 어플리케이션에서는 이벤트 전파 시스템이 유용할 수 있습니다.이는 Redis의 뛰어난 활용 사례이며, 영속적인 데이터는 MongoDB에 보관되어 있습니다.

데이터 모델은 Redis에 비해 MongoDB에 의한 설계가 훨씬 용이하기 때문에(Redis는 낮은 레벨), 메인 퍼시스턴트 데이터에 대한 MongoDB의 유연성과 Redis에 의해 제공되는 추가 기능(저레이텐시, 아이템 유효기간, 큐, pub/sub, 원자 블록 등)의 이점을 얻을 수 있습니다.정말 좋은 조합이에요.

Redis 서버와 MongoDB 서버를 같은 머신으로 실행해서는 안 됩니다.MongoDB 메모리는 스왑 아웃이 가능하도록 설계되어 있지만 Redis 메모리는 스왑 아웃이 아닙니다.MongoDB가 스와프 액티비티를 일으키면 Redis의 퍼포먼스는 파괴됩니다.서로 다른 노드에서 분리해야 합니다.

분명히 이것보다 훨씬 더 많은 차이가 있지만, 매우 높은 개요를 위해:

유스케이스의 경우:

  • Redis는 분산 계산을 위한 캐싱 레이어 또는 공유 화이트보드로 자주 사용됩니다.
  • MongoDB는 기존 SQL 데이터베이스의 스왑 아웃 대체품으로 자주 사용됩니다.

기술적으로는:

  • Redis는 디스크 지속성을 가진 메모리 내 DB입니다(DB 전체가 RAM에 들어가야 함).
  • MongoDB는 인덱스에 충분한 RAM만 필요한 디스크 백업 DB입니다.

몇 가지 중복이 있지만 둘 다 사용하는 것이 매우 일반적입니다.이유는 다음과 같습니다.

  • MongoDB는 더 많은 데이터를 더 저렴하게 저장할 수 있습니다.
  • Redis는 전체 데이터셋에서 더 빠릅니다.
  • MongoDB의 문화는 "모든 것을 저장하고 나중에 접근 패턴을 파악한다"
  • Redis의 문화는 「데이터에 액세스 해 보존하는 방법을 신중하게 검토한다」
  • 둘 다 서로 의존하는 오픈 소스 도구를 가지고 있으며, 이들 중 대부분은 함께 사용됩니다.

Redis는 기존 데이터 저장소를 대체할 수 있지만 Mongo, Postgresql, MySQL 등 일반적인 "긴" 데이터 저장소와 함께 사용되는 경우가 가장 많습니다.

Redis는 캐싱 서버로서 MongoDB와 매우 잘 연동됩니다.무슨 일이 일어나는지 알려줄게.

mongoose가 캐시 쿼리를 발행할 때마다 먼저 캐시 서버로 넘어갑니다.

캐시 서버는 해당 쿼리가 이전에 실행된 적이 있는지 확인합니다.

그렇지 않으면 캐시 서버가 쿼리를 받아 mongodb로 전송하고 Mongo가 쿼리를 실행합니다.

그런 다음 쿼리 결과를 가져와서 캐시 서버로 돌아갑니다. 캐시 서버는 쿼리 결과를 저장합니다.

쿼리를 실행할 때마다 이 응답이 표시되므로 실행된 쿼리와 해당 쿼리에서 반환된 응답 간에 레코드가 유지됩니다.

캐시 서버는 응답을 받아 mongoose로 돌려보냅니다.mongoose는 express에 주고 최종적으로 어플리케이션 내에 들어갑니다.

동일한 쿼리가 다시 발행될 때마다 mongoose는 캐시 서버에 동일한 쿼리를 전송합니다.그러나 캐시 서버가 쿼리를 mongodb로 전송하지 않고 이 쿼리가 발행되었음을 인식하면 대신 마지막으로 받은 쿼리에 대한 응답을 받아 즉시 mongoose로 돌려보냅니다.여기에는 인덱스도 없고 전체 테이블 스캔도 없습니다.

이 쿼리가 실행되었는지를 확인하기 위해 간단한 조회를 하고 있습니다.알았어, 요청서를 받아 즉시 돌려보내 몽고에게 아무것도 보내지 말고

mongoose 서버, 캐시 서버(Redis), Mongodb가 있습니다.

캐시 서버에 모든 키가 이전에 실행된 특정 유형의 쿼리와 해당 쿼리의 결과 값인 데이터스토어가 있을 수 있습니다.

그래서 아마 우리는 _id의 블로그 포스트를 많이 찾고 있을 것이다.

이 열쇠는 이전에 검색한 레코드의 _id일 수 있습니다.

예를 들어 mongoose가 새로운 쿼리를 발행하고 ID가 123인 블로그 포스트를 검색하려고 하면 쿼리가 캐시 서버로 흘러들어갑니다.캐시 서버는 ID가 123인 쿼리에 대한 결과가 있는지 확인합니다.

캐시 서버에 존재하지 않는 경우 이 쿼리는 mongodb 인스턴스로 전송됩니다.Mongodb가 쿼리를 실행하고 응답을 받은 후 반송할 것입니다.

이 결과는 캐시 서버로 반환되고 캐시 서버는 결과를 받아 즉시 mongoose로 반환되므로 가능한 한 빠른 응답을 얻을 수 있습니다.

그 직후 캐시 서버도 발행된 쿼리를 가져와 발행된 쿼리 컬렉션에 추가하고 쿼리 결과를 가져와 쿼리에 바로 저장합니다.

따라서 미래에 동일한 쿼리를 다시 발행하면 캐시 서버에 접속하여 가지고 있는 모든 키를 보고 이미 블로그 포스트를 찾았는데 mongoose에 도달하지 않고 쿼리 결과를 mongoose에 직접 전송할 수 있다고 생각할 수 있습니다.

우리는 복잡한 질의 논리나 색인 따위는 하지 않습니다.가능한 한 빠릅니다.단순한 키 값 검색입니다.

캐시 서버(Redis)가 MongoDB와 어떻게 동작하는지에 대한 개요입니다.

이제 다른 걱정거리들이 있다.데이터를 영원히 캐싱해야 합니까?레코드는 어떻게 갱신합니까?

데이터를 항상 캐시에 저장하고 캐시에서 읽기를 원하는 것은 아닙니다.

캐시 서버는 쓰기 작업에 사용되지 않습니다.캐시 계층은 데이터 읽기에만 사용됩니다.데이터를 쓸 경우 쓰기는 항상 mongodb 인스턴스로 넘어가기 때문에 데이터를 쓸 때마다 Mongo에서 방금 업데이트한 레코드와 관련된 캐시 서버에 저장된 데이터를 모두 지울 필요가 있습니다.

언급URL : https://stackoverflow.com/questions/10696463/mongodb-with-redis

반응형