2012-02-05 35 views
21

Tôi read about HStores trong Postgres một cái gì đó được cung cấp bởi Redis là tốt.Postgres Hstore so với Redis - hiệu suất khôn ngoan

Ứng dụng của chúng tôi được viết bằng NodeJS. Hai câu hỏi:

  • Hiệu suất khôn ngoan, Postgres HStore có thể so sánh với Redis không?

  • để lưu trữ phiên, bạn sẽ đề xuất gì - Redis hoặc Postgres với một số loại dữ liệu khác (như HStore hoặc thậm chí là bảng quan hệ thông thường)? Và làm thế nào xấu là một trong những lựa chọn so với khác?

hạn chế khác, là chúng ta sẽ cần phải sử dụng các dữ liệu đã có trong PostgreSQL và kết hợp nó với các buổi hoạt động (mà chúng tôi không chắc chắn nơi để lưu trữ vào thời điểm này, nếu trong Redis hoặc PostgreSQL). Từ những gì chúng tôi đã đọc, chúng tôi đã được chỉ ra để sử dụng Redis như một người quản lý phiên, nhưng do ràng buộc PostgreSQL, chúng tôi không chắc chắn làm thế nào để kết hợp cả hai và các vấn đề hiệu suất có thể có thể phát sinh.

Cảm ơn!

Trả lời

22

Redis sẽ nhanh hơn Postgres vì ​​Pg cung cấp độ tin cậy đảm bảo cho dữ liệu của bạn (khi giao dịch được cam kết, nó được đảm bảo trên đĩa), trong khi Redis có khái niệm ghi vào đĩa khi nó cảm thấy như vậy, không nên được sử dụng cho dữ liệu quan trọng.

Redis có vẻ như là một lựa chọn tốt cho dữ liệu phiên của bạn hoặc thậm chí là lưu trữ trong cookie hoặc trong Javascript phía máy khách của bạn. Nhưng nếu bạn cần dữ liệu từ cơ sở dữ liệu của bạn trên mọi yêu cầu thì nó có thể không có giá trị liên quan đến Redis. Nó phụ thuộc rất nhiều vào ứng dụng của bạn.

+3

Chỉ cần một bình luận nhỏ: Nếu bạn không cần đảm bảo độ tin cậy với Postgres (nguy cơ bị mất giao dịch trong trường hợp xảy ra sự cố nhưng không có nguy cơ bị hỏng dữ liệu trong trường hợp xảy ra sự cố) và tốc độ quan trọng hơn với bạn, bạn có thể muốn để kiểm tra việc tắt cài đặt 'synchronous_commit' trong vòng postgres. Điều này có thể giúp với rất nhiều viết nhỏ nhưng sẽ không giúp đỡ với lần đọc. – stereoscott

+3

Redis có giao dịch, nhưng đảm bảo là toàn bộ hoạt động đã giao dịch được cam kết với bộ nhớ. Ngoài ra còn có các tùy chọn cấu hình cho tần suất ghi dữ liệu vào đĩa. – Evgeny

+0

Cuối cùng tôi đã hiểu rằng Redis là một khái niệm hoàn toàn mới về cơ sở dữ liệu nói chung. Vì vậy, mới mà nhiều người -_like me_- không hiểu nó những khoảnh khắc đầu tiên. Nó đòi hỏi thời gian để thực sự bắt Redis, khi bạn đang sử dụng để Postgres. Nó là một cơ sở dữ liệu đương đại thực sự. Nói rằng nó chỉ đơn giản là một cửa hàng cookie/phiên là đánh giá thấp Redis. Vì vậy, mới mà nhiều người đưa ra ý kiến ​​về nó mà không thực sự biết. Chúng tôi sử dụng nó trong một dự án không web như một databank cho hàng triệu dữ liệu và nó thực hiện tốt công việc! Khi nói đến độ tin cậy, không có phần mềm nào trên thế giới đáng tin cậy 100%, thậm chí cả Postgres. – 1111161171159459134

3

Sử dụng PostgreSQL làm trình quản lý phiên thường là ý tưởng tồi.

Đối với lớn hơn 9,1 là giới hạn giao dịch vật lý trên giây dựa trên các thông số truyền thông liên tục. Đối với quản lý phiên, bạn thường không cần MGA (vì không có va chạm) và nó có nghĩa là MGA là trên không và cơ sở dữ liệu không có MGA và ACID phải nhanh hơn đáng kể (10 hoặc 100).

Tôi biết trường hợp sử dụng, nơi PostgreSQL được sử dụng để quản lý phiên và Hiệu suất thực sự khủng khiếp và không ổn định - đó là eshop với khoảng 10.000 phiên khách. Khi quản lý phiên được chuyển sang memcached, sau đó hiệu suất và sự ổn định đã được tăng lên đáng kể. PostgreSQL có thể được sử dụng cho 100 phiên làm việc mà không gặp vấn đề gì. Đối với số cao hơn có những công cụ tốt hơn.

+0

cảm ơn! chúng tôi thực sự đang hướng tới redis nhưng, như đã nói ở trên, chúng tôi không chắc chắn về cách truy vấn postgres để trả lại thông tin từ người dùng đang hoạt động bằng redis ... bất kỳ mẹo nào? – jribeiro

+2

Bạn có thể sử dụng memcache thay vì redis để xử lý phiên. Nó hoạt động rất tốt https://github.com/elbart/node-memcache –

+0

@MarekTuchalski Xin chào! Xin lỗi vì sự chậm trễ và cảm ơn câu trả lời của bạn. Câu hỏi của tôi vẫn còn ... Làm cách nào để kết nối dữ liệu từ memcached đến postgres? Tôi sẽ phải lặp qua tất cả các kết quả và vượt qua chúng để postgres phải không? Nghe có vẻ như đau đớn ... – jribeiro

Các vấn đề liên quan