2010-05-04 44 views
5

Tôi có một vài giá trị dữ liệu cần lưu trữ trên ứng dụng đường ray và muốn biết liệu có bất kỳ lựa chọn thay thế nào để tạo bảng cơ sở dữ liệu hay không.Lưu trữ dữ liệu trong Ruby on Rails mà không có cơ sở dữ liệu

Bối cảnh: Tôi đang viết một số công cụ phân tích và bảng điều khiển cho ruby ​​trên ứng dụng đường ray và tôi hy vọng tăng tốc bảng điều khiển bằng cách lưu vào bộ nhớ cache kết quả sẽ không bao giờ thay đổi. Ngay bây giờ tôi kéo tất cả người dùng trong 30 ngày qua và sắp xếp lại chúng để tôi có thể thấy số lượng người dùng mới mỗi ngày. Nó hoạt động rất tốt nhưng phải mất khá nhiều thời gian, trong thực tế tôi chỉ cần tính toán ngày gần đây nhất và chỉ lưu trữ phần còn lại của mảng ở một nơi khác.

Cách tốt nhất để lưu trữ mảng này ở đâu?

Tạo bảng cơ sở dữ liệu có vẻ hơi quá mức và tôi không chắc chắn rằng các biến chung là câu trả lời đúng. Có cách nào tốt nhất để duy trì dữ liệu như thế này không?

Nếu có ai đã làm bất cứ điều gì như thế này trước khi cho tôi biết những gì bạn đã làm và cách nó bật ra.

Trả lời

11

Ruby có một kho lưu trữ giá trị khóa dựa trên Hash có tên PStore. Điều này cung cấp dựa trên tập tin đơn giản, giao dịch kiên trì.

+0

Tôi thích điều này rất nhiều, không biết rằng nó tồn tại, dựa trên mô tả vấn đề, và kinh nghiệm bạn sẽ đề nghị phương pháp này trên các đề xuất khác của "chỉ cần sử dụng DB"? – Schneems

+0

Nếu trường hợp sử dụng của bạn chỉ là sắp xếp một mảng, nó có vẻ giống như vậy, thì tại sao không? Nếu nó không làm việc cho bạn thì thật dễ dàng để thay đổi một giải pháp khác xuống dòng. –

1

Sử dụng cơ sở dữ liệu nhẹ như sqlite không nên cảm thấy quá mức cần thiết. Ngoài ra, bạn có thể sử dụng các giải pháp lưu trữ khóa như tủ tokyo hoặc thậm chí lưu trữ mảng trong một tệp phẳng theo cách thủ công nhưng tôi thực sự không thấy bất kỳ mức quá mức nào khi sử dụng sqlite.

+0

Tôi đoán quá mức cần thiết tôi cảm thấy sẽ xuất phát từ văn bản cho lược đồ, di chuyển các cơ sở dữ liệu, đối phó với hai adapter khác nhau trong dự án Rails của tôi (hiện tại sử dụng MYSQL cho mọi thứ khác), và sau đó viết các truy vấn sql (vì các mục này không được gắn với một mô hình) ... khi vào cuối ngày tất cả tôi muốn trở lại là [1,2,3,4,5] . Tôi không ngại làm tất cả những điều này, tôi chỉ tò mò muốn xem những người khác đã tiếp cận cùng một kịch bản như thế nào. – Schneems

1

Nếu bạn đã có một cơ sở dữ liệu đã có, nó thực sự không phải là một vấn đề lớn để tạo ra một bảng riêng biệt để theo dõi các loại điều này. Khi thực hiện báo cáo, thường là lợi thế của bạn để tạo các bảng tóm tắt phái sinh chính xác như những gì bạn mô tả. Bạn có thể cập nhật chúng theo yêu cầu bằng cách sử dụng một câu lệnh SQL đơn giản và không có lo lắng rằng cửa hàng tạm thời của bạn sẽ bằng cách nào đó biến mất.

Điều đó đang được nói, loại báo cáo bạn đang cố gắng tạo ra thực sự là một thứ có thể được thực hiện trong thời gian thực ngoại trừ các tập dữ liệu cực lớn. Điều quan trọng là có các chỉ mục mô tả hoạt động nhóm chính xác mà bạn đang cố gắng thực hiện. Ví dụ: nếu bạn đang nhóm theo ngày theo lịch, bạn có thể tạo trường "ngày" và đồng bộ hóa với thời gian "created_at" theo yêu cầu. Một chỉ số trên sân ngày này sẽ làm cho làm một GROUP BY CREATED_DATE rất nhanh:

SELECT created_date AS on_date, COUNT(id) AS new_users FROM users GROUP BY created_date 
+0

Thật không may tôi không làm điều này chỉ cho người dùng, nhưng một vài yếu tố khác cũng như số lượng email được gửi mỗi ngày là trong hàng ngàn (mỗi ngày) để kéo 30 ngày giá trị của dữ liệu mô hình mới nhất. Sau đó, khi tôi nhận được các đối tượng, tôi phải thực hiện create_at (đối tượng ngày/giờ) và đánh giá lặp lại để nhóm các đối tượng. Có lẽ có một cách tốt hơn, nhưng tôi đã không thể đánh đinh trên đầu được nêu ra. – Schneems

+1

Thêm cột có thể lập chỉ mục, nơi đó là ngày và không phải là ngày tháng, sẽ giúp khi tạo báo cáo ở vị trí đầu tiên. Thêm một ngày giá trị của dữ liệu tại một thời điểm cũng khá hiệu quả, ngay cả đối với khối lượng lớn, nhưng thời gian thiết lập để thêm tất cả các dữ liệu lịch sử có thể đáng kể. Việc chèn một nhóm được đếm chỉ mất vài giây và sẽ chỉ phải thực hiện một lần mỗi ngày, dễ dàng thực hiện như một công việc nền hoặc nhiệm vụ cron. Không thực sự tải các mô hình nếu tất cả những gì bạn muốn làm là đếm chúng. Chỉ cần sử dụng SQL trực tiếp. – tadman

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