Khi nào Redis? Khi nào đến MongoDB? [đóng cửa]


466

Điều tôi muốn không phải là sự so sánh giữa Redis và MongoDB. Tôi biết họ khác nhau; hiệu suất và API hoàn toàn khác nhau.

Redis rất nhanh, nhưng API rất 'nguyên tử'. MongoDB sẽ ăn nhiều tài nguyên hơn, nhưng API rất dễ sử dụng và tôi rất hài lòng với nó.

Cả hai đều tuyệt vời và tôi muốn sử dụng Redis để triển khai nhiều nhất có thể, nhưng thật khó để viết mã. Tôi muốn sử dụng MongoDB trong phát triển càng nhiều càng tốt, nhưng nó cần một cỗ máy đắt tiền.

Vậy bạn nghĩ gì về việc sử dụng cả hai? Khi nào nên chọn Redis? Khi nào nên chọn MongoDB?

Câu trả lời:


308

Tôi có thể nói, nó phụ thuộc vào loại nhóm phát triển của bạn và nhu cầu ứng dụng của bạn.

Ví dụ: nếu bạn yêu cầu nhiều truy vấn , điều đó có nghĩa là các nhà phát triển của bạn sẽ sử dụng Redis nhiều hơn, nơi dữ liệu của bạn có thể được lưu trữ trong nhiều cấu trúc dữ liệu chuyên biệt, được tùy chỉnh cho từng loại đối tượng để đạt hiệu quả. Trong MongoDB, các truy vấn tương tự có thể dễ dàng hơn vì cấu trúc phù hợp hơn trên dữ liệu của bạn. Mặt khác, ở Redis, tốc độ phản hồi nhanh đối với các truy vấn đó là phần thưởng cho công việc bổ sung để xử lý nhiều loại cấu trúc mà dữ liệu của bạn có thể được lưu trữ.

MongoDB cung cấp sự đơn giản, đường cong học tập ngắn hơn nhiều cho các nhà phát triển với trải nghiệm DB và SQL truyền thống. Tuy nhiên, cách tiếp cận phi truyền thống của Redis đòi hỏi nhiều nỗ lực hơn để học hỏi, nhưng tính linh hoạt cao hơn.

Ví dụ. Một lớp bộ đệm có thể được thực hiện tốt hơn trong Redis. Đối với nhiều dữ liệu có thể lược đồ hơn, MongoDB là tốt hơn. [Lưu ý: cả MongoDB và Redis đều có sơ đồ kỹ thuật]

Nếu bạn hỏi tôi, lựa chọn cá nhân của tôi là Redis cho hầu hết các yêu cầu.

Cuối cùng, tôi hy vọng bây giờ bạn đã thấy http://antirez.com/post/MongoDB-and-Redis.html


16
fyi, mongodb là schemaless.
Özgür

18
MogoDB là schemaless. và khi dữ liệu được lưu trữ trong cơ sở dữ liệu ngày càng lớn hơn, MongoDB chứng minh rằng nó nhanh hơn Redis rất nhiều. Redis chỉ nhanh hơn khi dữ liệu được lưu trữ nhỏ.
Anderson

4
Tôi thích cách tiếp cận của MongoDB là một học giả và sau đó giao cho các tác giả ORM thực hiện các lược đồ cho những người cần chúng. Mongoose là một ORM tuyệt vời giới thiệu các lược đồ dễ sử dụng nếu bạn cần chúng :)
Chev

18
Bạn nên biết rằng kích thước cơ sở dữ liệu redis bị giới hạn bởi dung lượng RAM trong máy. Bất kỳ lớn hơn thế và bạn phải nghĩ phân cụm là thủ công và chuyên sâu.
Akash Agrawal

4
MongoDB không thi hành một lược đồ, nhưng tôi muốn thấy một trường hợp ai đó sử dụng nó mà không có lược đồ ... đó là tất cả cách bạn định nghĩa lược đồ từ
Robbie Guilfoyle

236

Tôi chỉ nhận thấy rằng câu hỏi này khá cũ. Tuy nhiên, tôi coi các khía cạnh sau là đáng để thêm vào:

  • Sử dụng MongoDB nếu bạn chưa biết cách bạn sẽ truy vấn dữ liệu của mình.

    MongoDB phù hợp với Hackathons, khởi nghiệp hoặc mỗi khi bạn không biết cách bạn sẽ truy vấn dữ liệu bạn đã chèn. MongoDB không đưa ra bất kỳ giả định nào về lược đồ cơ bản của bạn. Trong khi MongoDB là schemaless và không liên quan, điều này không có nghĩa là không có lược đồ nào cả. Nó đơn giản có nghĩa là lược đồ của bạn cần được xác định trong ứng dụng của bạn (ví dụ: sử dụng Mongoose). Bên cạnh đó, MongoDB là công cụ tuyệt vời để tạo mẫu hoặc thử mọi thứ. Hiệu suất của nó không phải là tuyệt vời và không thể so sánh với Redis.

  • Sử dụng Redis để tăng tốc ứng dụng hiện tại của bạn.

    Redis có thể được tích hợp dễ dàng như một bộ đệm LRU . Rất hiếm khi sử dụng Redis như một hệ thống cơ sở dữ liệu độc lập (một số người thích coi nó là một kho lưu trữ "khóa-giá trị"). Các trang web như Craigslist sử dụng Redis bên cạnh cơ sở dữ liệu chính của họ . Antirez (nhà phát triển Redis) đã chứng minh bằng cách sử dụng Lamernews rằng thực sự có thể sử dụng Redis như một hệ thống cơ sở dữ liệu độc lập.

  • Redis không đưa ra bất kỳ giả định nào dựa trên dữ liệu của bạn.

    Redis cung cấp một loạt các cấu trúc dữ liệu hữu ích (ví dụ: Bộ, Băm, Danh sách), nhưng bạn phải xác định rõ ràng cách bạn muốn lưu trữ dữ liệu của mình. Nói một cách dễ hiểu, Redis và MongoDB có thể được sử dụng để đạt được những điều tương tự. Redis đơn giản là nhanh hơn, nhưng không phù hợp để tạo mẫu. Đó là một trường hợp sử dụng mà bạn thường thích MongoDB. Bên cạnh đó, Redis thực sự linh hoạt. Các cấu trúc dữ liệu cơ bản mà nó cung cấp là các khối xây dựng của các hệ thống DB hiệu suất cao.

Khi nào nên sử dụng Redis?

  • Bộ nhớ đệm

    Bộ nhớ đệm sử dụng MongoDB đơn giản là không có nhiều ý nghĩa. Nó sẽ quá chậm.

  • Nếu bạn có đủ thời gian để suy nghĩ về thiết kế DB của bạn.

    Bạn không thể đơn giản ném tài liệu của mình vào Redis. Bạn phải nghĩ về cách bạn muốn lưu trữ và sắp xếp dữ liệu của bạn. Một ví dụ là băm trong Redis. Chúng khá khác với các đối tượng lồng nhau "truyền thống", có nghĩa là bạn sẽ phải suy nghĩ lại về cách bạn lưu trữ các tài liệu lồng nhau. Một giải pháp sẽ là lưu trữ một tham chiếu bên trong hàm băm sang hàm băm khác (một cái gì đó như khóa: [id của hàm băm thứ hai] ). Một ý tưởng khác là lưu trữ nó dưới dạng JSON, dường như phản trực giác với hầu hết mọi người với nền tảng * SQL.

  • Nếu bạn cần hiệu suất thực sự cao.

    Đánh bại hiệu suất mà Redis cung cấp là gần như không thể. Hãy tưởng tượng cơ sở dữ liệu của bạn nhanh như bộ nhớ cache của bạn. Đó là những gì nó cảm thấy như sử dụng Redis như một cơ sở dữ liệu thực sự .

  • Nếu bạn không quan tâm rằng nhiều về mở rộng quy mô.

    Thu nhỏ Redis không khó như trước đây. Chẳng hạn, bạn có thể sử dụng một loại máy chủ proxy để phân phối dữ liệu giữa nhiều phiên bản Redis. Sao chép chính-nô lệ không quá phức tạp, nhưng việc phân phối các khóa của bạn cho nhiều trường hợp Redis cần phải được thực hiện trên trang web của ứng dụng (ví dụ: sử dụng hàm băm, Modulo, v.v.). Thu nhỏ MongoDB bằng cách so sánh đơn giản hơn nhiều.

Khi nào nên sử dụng MongoDB

  • Tạo mẫu, khởi động, Hackathons

    MongoDB hoàn toàn phù hợp để tạo mẫu nhanh. Tuy nhiên, hiệu suất không phải là tốt. Ngoài ra, hãy nhớ rằng rất có thể bạn sẽ phải xác định một số loại lược đồ trong ứng dụng của mình.

  • Khi bạn cần thay đổi lược đồ của bạn một cách nhanh chóng.

    Bởi vì không có lược đồ! Thay đổi bảng trong DBMS truyền thống, quan hệ là rất tốn kém và chậm. MongoDB giải quyết vấn đề này bằng cách không đưa ra nhiều giả định về dữ liệu cơ bản của bạn. Tuy nhiên, nó cố gắng tối ưu hóa càng nhiều càng tốt mà không yêu cầu bạn xác định một lược đồ.

TL; DR - Sử dụng Redis nếu hiệu suất là quan trọng và bạn sẵn sàng dành thời gian để tối ưu hóa và sắp xếp dữ liệu của mình. - Sử dụng MongoDB nếu bạn cần xây dựng một nguyên mẫu mà không phải lo lắng quá nhiều về DB của mình.

Đọc thêm:


3
Nếu bạn có đủ thời gian để suy nghĩ về thiết kế DB của bạn. Để nhận ra điều đó: giả sử bạn muốn lưu trữ dữ liệu SO. Trong Mongo : Đơn giản chỉ cần bỏ các câu hỏi hoàn chỉnh với các câu trả lời và nhận xét lồng nhau, nhưng trong redis bạn phải làm như sau: SO on redis
Abhishek Gupta

223

Redis. Giả sử bạn đã viết một trang web bằng php; vì bất kỳ lý do gì, nó trở nên phổ biến và đi trước thời đại hoặc có nội dung khiêu dâm. Bạn nhận ra rằng php này quá chậm chạp, "Tôi sẽ mất người hâm mộ vì đơn giản là họ sẽ không đợi 10 giây cho một trang." Bạn có một nhận thức bất ngờ rằng một trang web có một url không đổi (nó không bao giờ thay đổi, whoa), một khóa chính nếu bạn muốn, và sau đó bạn nhớ lại rằng bộ nhớ nhanh trong khi đĩa chậm và php thậm chí còn chậm hơn. :( Sau đó, bạn tạo cơ chế lưu trữ bằng bộ nhớ và URL này mà bạn gọi là "khóa" trong khi nội dung trang web bạn quyết định gọi là "giá trị". Đó là tất cả những gì bạn có - khóa và nội dung. Bạn gọi nó là "bộ nhớ cache". Bạn thích Richard Dawkins vì anh ấy tuyệt vời. Bạn lưu trữ html của bạn như những chú sóc lưu trữ các hạt của chúng. Bạn không cần phải viết lại mã php tào lao của mình. Bạn đang hạnh phúc. Sau đó, bạn thấy rằng những người khác đã làm điều đó - nhưng bạn chọn Redis vì người khác có hình ảnh khó hiểu về mèo, một số có răng nanh.

Mongo. Bạn đã viết một trang web. Heck bạn đã viết nhiều, và bằng bất kỳ ngôn ngữ. Bạn nhận ra rằng phần lớn thời gian của bạn dành cho việc viết các mệnh đề SQL hôi thối đó. Bạn không phải là một dba, nhưng vẫn có bạn, viết những câu lệnh sql ngu ngốc ... không chỉ một mà còn kỳ dị ở khắp mọi nơi. "Chọn cái này, chọn cái kia". Nhưng đặc biệt bạn nhớ mệnh đề WHERE khó chịu. Trong đó Lastname bằng "thornton" và phim bằng "bad santa". Urgh. Bạn nghĩ, "tại sao những dbas đó không làm công việc của họ và đưa cho tôi một số thủ tục được lưu trữ?" Sau đó, bạn quên một số trường nhỏ như middlename và sau đó bạn phải bỏ bảng, xuất tất cả 10G dữ liệu lớn và tạo một trường khác với trường mới này và nhập dữ liệu - và điều đó diễn ra 10 lần trong 14 ngày tiếp theo khi bạn tiếp tục ghi nhớ tào lao như lời chào, tiêu đề, cộng với việc thêm khóa ngoại có địa chỉ. Sau đó, bạn hình dung họ đó phải là LastName. Hầu như một thay đổi một ngày. Sau đó, bạn nói darnit. Tôi phải truy cập và viết một trang web / hệ thống, không bao giờ bận tâm đến mô hình dữ liệu bs này. Vì vậy, bạn google, "Tôi ghét viết SQL, xin vui lòng không SQL, làm cho nó dừng lại" nhưng bật lên 'nosql' và sau đó bạn đọc một số nội dung và nó nói rằng nó chỉ bỏ dữ liệu mà không có bất kỳ lược đồ nào. Bạn nhớ fiasco tuần trước thả nhiều bàn và mỉm cười. Sau đó, bạn chọn mongo vì một số ông lớn như 'airbud' trang web cho thuê apt sử dụng nó. Ngọt. Không có nhiều mô hình dữ liệu thay đổi bởi vì bạn có một mô hình mà bạn cứ thay đổi.


Ý bạn là gì You don't need to rewrite your crap php code?, làm thế nào để cửa hàng kv giải quyết điều này? :)
Roy Lee

13
@Roylee anh ta có nghĩa là php chậm chạp và nhảm nhí xuất ra một trang web bằng html. Thay vì viết lại mã một cách mạnh mẽ để làm cho nó nhanh hơn / hiệu quả hơn, bạn chạy php một lần ngay từ đầu sau đó mãi mãi, chỉ cần nhớ lại trang web dựng sẵn trong html bằng cách sử dụng cửa hàng kv của bạn.
Mikepote

Cách bạn kể câu chuyện này cuối cùng đã giúp tôi khái niệm hóa lý do tại sao lược đồ không tuyệt vời! Chỉ cần tiết kiệm cho tôi một vài năm phải đối phó với SQL để hiểu sức mạnh.
Nick Pineda

4
'Không có nhiều thay đổi mô hình' không thực sự nắm bắt được tình hình. Trừ khi bạn viết mã chuyển động dữ liệu để cập nhật tất cả các mục nhập hiện có của mình, thì giống như bạn có các mô hình hơi khác nhau, tất cả đều sống trong cùng một DB cùng một lúc, và mã của bạn phải tìm ra mô hình mà nó đang xử lý khi nào nó đọc một cái gì đó từ DB.
Terry Coatta

2
Một trong những câu trả lời tuyệt đối tốt nhất tôi từng thấy. Nó có nội dung tuyệt vời và thực sự khiến tôi bật cười thành tiếng (nghĩa đen không phải lol)
colbyJax

16

Có lẽ tài nguyên này là hữu ích giúp quyết định giữa cả hai. Nó cũng thảo luận về một số cơ sở dữ liệu NoQuery khác và cung cấp một danh sách ngắn các đặc điểm, cùng với lời giải thích "tôi sẽ sử dụng nó để làm gì" cho mỗi cơ sở dữ liệu .

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


11

Câu hỏi khó trả lời - như với hầu hết các giải pháp công nghệ, nó thực sự phụ thuộc vào tình huống của bạn và vì bạn chưa mô tả vấn đề bạn đang cố gắng giải quyết, làm thế nào có ai có thể đề xuất giải pháp?

Bạn cần kiểm tra cả hai để xem ai trong số họ thỏa mãn nhu cầu của bạn .

Như đã nói, MongoDB không yêu cầu bất kỳ phần cứng đắt tiền nào. Giống như bất kỳ giải pháp cơ sở dữ liệu nào khác, nó sẽ hoạt động tốt hơn với nhiều CPU và bộ nhớ hơn nhưng chắc chắn không phải là một yêu cầu - đặc biệt là cho các mục đích phát triển sớm.


10

Redis là một kho lưu trữ dữ liệu trong bộ nhớ , có thể duy trì trạng thái của nó trên đĩa (để cho phép khôi phục sau khi khởi động lại). Tuy nhiên, là kho lưu trữ dữ liệu trong bộ nhớ có nghĩa là kích thước của kho lưu trữ dữ liệu (trên một nút) không thể vượt quá tổng dung lượng bộ nhớ trên hệ thống (RAM vật lý + không gian trao đổi). Trong thực tế, điều này sẽ ít hơn nhiều, vì Redis đang chia sẻ không gian đó với nhiều quy trình khác trên hệ thống, và nếu nó làm cạn kiệt không gian bộ nhớ hệ thống, nó có khả năng sẽ bị hệ điều hành tiêu diệt.

Mongo là một kho lưu trữ dữ liệu dựa trên đĩa , hoạt động hiệu quả nhất khi bộ làm việc của nó vừa với RAM vật lý (giống như tất cả các phần mềm). Là dữ liệu dựa trên đĩa có nghĩa là không có giới hạn nội tại về kích thước của cơ sở dữ liệu Mongo, tuy nhiên tùy chọn cấu hình, dung lượng đĩa trống và các mối quan tâm khác có thể có nghĩa là kích thước cơ sở dữ liệu vượt quá giới hạn nhất định có thể không thực tế hoặc không hiệu quả.

Cả Redis và Mongo đều có thể được phân cụm để có tính sẵn sàng cao, sao lưu và để tăng kích thước tổng thể của kho dữ liệu.


10

Tất cả các câu trả lời (tại thời điểm viết bài này) giả sử mỗi Redis, MongoDB và có lẽ một cơ sở dữ liệu quan hệ dựa trên SQL về cơ bản là cùng một công cụ: "lưu trữ dữ liệu". Họ không xem xét mô hình dữ liệu nào cả.

MongoDB: Dữ liệu phức tạp

MongoDB là một cửa hàng tài liệu. Để so sánh với cơ sở dữ liệu quan hệ dựa trên SQL: cơ sở dữ liệu quan hệ đơn giản hóa các tệp CSV được lập chỉ mục, mỗi tệp là một bảng; lưu trữ tài liệu đơn giản hóa thành các tệp JSON được lập chỉ mục, mỗi tệp là một tài liệu, với nhiều tệp được nhóm lại với nhau.

Các tệp JSON có cấu trúc tương tự như các tệp XML và YAML và từ điển như trong Python, vì vậy hãy nghĩ về dữ liệu của bạn trong loại phân cấp đó. Khi lập chỉ mục, cấu trúc là khóa: Một tài liệu chứa các khóa được đặt tên, chứa các tài liệu, mảng hoặc giá trị vô hướng. Hãy xem xét các tài liệu dưới đây.

{
  _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"
}

Các tài liệu trên có một khóa, PhoneNumber.Mobilecó giá trị 555 634-5789. Bạn có thể tìm kiếm thông qua một bộ sưu tập các tài liệu trong đó khóa PhoneNumber.Mobile, có một số giá trị; chúng được lập chỉ mục.

Nó cũng có một mảng Accountschứa nhiều chỉ mục. Có thể truy vấn tài liệu Accountschứa chính xác một số tập hợp con các giá trị, tất cả một tập hợp con các giá trị hoặc bất kỳ tập hợp con nào của các giá trị. Điều đó có nghĩa là bạn có thể tìm kiếm Accounts = ["379-1111", "379-2574"]và không tìm thấy ở trên; bạn có thể tìm kiếm Accounts includes ["379-1111"]và tìm tài liệu trên; và bạn có thể tìm kiếm Accounts includes any of ["974-3785","414-6731"]và tìm tài liệu trên và bất kỳ tài liệu nào bao gồm tài khoản "974-3785", nếu có.

Tài liệu đi sâu như bạn muốn. PhoneNumber.Mobilecó thể chứa một mảng, hoặc thậm chí là một tài liệu phụ ( PhoneNumber.Mobile.WorkPhoneNumber.Mobile.Personal). Nếu dữ liệu của bạn có cấu trúc cao, tài liệu là một bước tiến lớn từ cơ sở dữ liệu quan hệ.

Nếu dữ liệu của bạn chủ yếu bằng phẳng, có quan hệ và được cấu trúc chặt chẽ, bạn nên sử dụng cơ sở dữ liệu quan hệ. Một lần nữa, dấu hiệu lớn là liệu mô hình dữ liệu của bạn phù hợp nhất với tập hợp các tệp CSV có liên quan đến nhau hay tập hợp các tệp XML / JSON / YAML.

Đối với hầu hết các dự án, bạn sẽ phải thỏa hiệp, chấp nhận một công việc nhỏ ở một số khu vực nhỏ nơi SQL hoặc Kho lưu trữ tài liệu không phù hợp; đối với một số dự án lớn, phức tạp lưu trữ một lượng lớn dữ liệu (nhiều cột; các hàng không liên quan), sẽ rất hợp lý khi lưu trữ một số dữ liệu trong một mô hình và dữ liệu khác trong một mô hình khác. Facebook sử dụng cả SQL và cơ sở dữ liệu đồ thị (nơi dữ liệu được đưa vào các nút và các nút được kết nối với các nút khác); Craigslist đã từng sử dụng MySQL và MongoDB, nhưng đã tìm cách chuyển hoàn toàn sang MongoDB. Đây là những nơi mà khoảng cách và mối quan hệ của dữ liệu phải đối mặt với các khuyết tật đáng kể nếu được đặt trong một mô hình.

Redis: Khóa-Giá trị

Redis, về cơ bản, là một cửa hàng khóa-giá trị. Redis cho phép bạn cung cấp cho nó một khóa và tìm kiếm một giá trị duy nhất. Bản thân Redis có thể lưu trữ chuỗi, danh sách, băm và một vài thứ khác; Tuy nhiên, nó chỉ tìm kiếm theo tên.

Vô hiệu bộ nhớ cache là một trong những vấn đề khó khăn của khoa học máy tính; cái khác là đặt tên. Điều đó có nghĩa là bạn sẽ sử dụng Redis khi bạn muốn tránh hàng trăm lượt tra cứu dư thừa cho một back-end, nhưng bạn sẽ phải tìm ra khi nào bạn cần một cái nhìn mới.

Trường hợp không hợp lệ rõ ràng nhất là cập nhật về ghi: nếu bạn đọc user:Simon:lingots = NOTFOUND, bạn có thể SELECT Lingots FROM Store s INNER JOIN UserProfile u ON s.UserID = u.UserID WHERE u.Username = Simonvà lưu trữ kết quả 100, như SET user:Simon:lingots = 100. Sau đó, khi bạn giải thưởng Simon 5 lingots, bạn đọc user:Simon:lingots = 100, SET user:Simon:lingots = 105UPDATE Store s INNER JOIN UserProfile u ON s.UserID = u.UserID SET s.Lingots = 105 WHERE u.Username = Simon. Bây giờ bạn có 105 trong cơ sở dữ liệu của bạn và trong Redis, và có thể lấy user:Simon:lingotsmà không cần truy vấn cơ sở dữ liệu.

Trường hợp thứ hai là cập nhật thông tin phụ thuộc. Giả sử bạn tạo các đoạn của trang và lưu trữ đầu ra của chúng. Tiêu đề cho thấy kinh nghiệm, cấp độ và số tiền của người chơi; Trang hồ sơ của người chơi có một khối hiển thị số liệu thống kê của họ; và kể từ đó trở đi. Người chơi có được một số kinh nghiệm. Chà, bây giờ bạn có một vài templates:Header:Simon,templates:StatsBox:Simon , templates:GrowthGraph:Simon, và vân vân các lĩnh vực nơi bạn đã lưu trữ các sản phẩm của một nửa tá cơ sở dữ liệu truy vấn chạy qua một mẫu động cơ. Thông thường, khi bạn hiển thị các trang này, bạn nói:

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

Bởi vì bạn vừa cập nhật kết quả của GetStatsFromDatabase("Simon") , bạn phải bỏ templates:*:Simonbộ đệm khóa-giá trị. Khi bạn cố gắng kết xuất bất kỳ mẫu nào trong số này, ứng dụng của bạn sẽ loại bỏ dữ liệu tìm nạp từ cơ sở dữ liệu của bạn (PostgreQuery, MongoDB) và chèn nó vào mẫu của bạn; sau đó nó sẽ lưu trữ kết quả trong Redis và, hy vọng, không bận tâm thực hiện các truy vấn cơ sở dữ liệu và kết xuất mẫu trong lần tiếp theo nó hiển thị khối đầu ra đó.

Redis cũng cho phép bạn thực hiện hàng đợi tin nhắn đăng ký nhà xuất bản và như vậy. Đó là một chủ đề hoàn toàn khác. Điểm ở đây là Redis là bộ đệm giá trị khóa, khác với cơ sở dữ liệu quan hệ hoặc kho lưu trữ tài liệu.

Phần kết luận

Chọn công cụ của bạn dựa trên nhu cầu của bạn. Nhu cầu lớn nhất thường là mô hình dữ liệu, vì điều đó xác định mức độ phức tạp và dễ bị lỗi của mã của bạn. Các ứng dụng chuyên dụng sẽ dựa vào hiệu suất, nơi bạn viết mọi thứ trong hỗn hợp C và hội; hầu hết các ứng dụng sẽ chỉ xử lý trường hợp tổng quát và sử dụng hệ thống bộ đệm như Redis hoặc Memcached, nhanh hơn rất nhiều so với cơ sở dữ liệu SQL hiệu suất cao hoặc kho lưu trữ tài liệu.


2
"Vô hiệu hóa bộ đệm là một trong những vấn đề khó khăn của khoa học máy tính, vấn đề còn lại là đặt tên cho mọi thứ." Thật vậy!
Arel

2

Và bạn không nên sử dụng nếu bạn có nhiều RAM. Redis và MongoDB có giá của một công cụ cho mục đích chung. Điều này giới thiệu rất nhiều chi phí.

Có câu nói rằng Redis nhanh gấp 10 lần Mongo. Điều đó có thể không còn đúng nữa. MongoDB (nếu tôi nhớ chính xác) tuyên bố sẽ đánh bại memcache để lưu trữ và lưu trữ các tài liệu miễn là các cấu hình bộ nhớ giống nhau.

Nhưng dù sao đi nữa. Redis tốt, MongoDB là tốt. Nếu bạn quan tâm đến các cấu trúc con và cần tổng hợp, hãy tìm MongoDB. Nếu lưu trữ khóa và giá trị là mối quan tâm chính của bạn thì tất cả là về Redis. (hoặc bất kỳ cửa hàng giá trị quan trọng khác).


2

Redis và MongoDB đều là các cơ sở dữ liệu không liên quan nhưng chúng thuộc các loại khác nhau.

Redis là một cơ sở dữ liệu Khóa / Giá trị và nó sử dụng bộ nhớ trong giúp bộ nhớ siêu nhanh. Đó là một ứng cử viên tốt cho bộ nhớ đệm và lưu trữ dữ liệu tạm thời (trong bộ nhớ) và vì hầu hết các nền tảng đám mây (như Azure, AWS) đều hỗ trợ nó, việc sử dụng bộ nhớ có thể mở rộng được. Nhưng nếu bạn sẽ sử dụng nó trên máy của mình tài nguyên hạn chế, xem xét nó sử dụng bộ nhớ.

MongoDB, mặt khác, là một cơ sở dữ liệu tài liệu. Đây là một lựa chọn tốt để giữ các văn bản, hình ảnh, video lớn, v.v. và hầu hết mọi thứ bạn làm với cơ sở dữ liệu ngoại trừ giao dịch. Ví dụ: nếu bạn muốn phát triển blog hoặc mạng xã hội, MongoDB là một lựa chọn thích hợp. Đó là khả năng mở rộng với chiến lược mở rộng. Nó sử dụng đĩa làm phương tiện lưu trữ, vì vậy dữ liệu sẽ được duy trì.


1

Nếu dự án của bạn bắt đầu cho phép bạn có đủ bộ nhớ RAM trên môi trường của mình - câu trả lời là Redis. Đặc biệt là tính đến Redis 3.2 mới với chức năng cluster.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.