Phần lớn câu trả lời phụ thuộc vào những gì bạn muốn làm với nó sau khi nó được thu thập. Lưu trữ rất nhiều dữ liệu rất dễ dàng: chỉ cần dumt nó vào các tập tin đăng nhập, không cần một cơ sở dữ liệu. Mặt khác, nếu bạn muốn thực hiện phân tích phức tạp và khai thác dữ liệu trên đó, thì cơ sở dữ liệu sẽ hữu ích.
Câu hỏi tiếp theo là loại phân tích bạn sẽ làm. Nó sẽ được thực hiện trên một tập con của dữ liệu có một thuộc tính cụ thể, chỉ giờ cuối cùng/ngày/tuần/tháng, liệu dữ liệu có được tổng hợp hay bằng cách nào đó được tính toán trước không? Nói cách khác: bạn có cần truy cập vào toàn bộ tập dữ liệu trong biểu mẫu được thu thập không? Bạn có thể lưu trữ dữ liệu khi nó quá cũ để trở nên thú vị không? Bạn có thể tổng hợp dữ liệu và thực hiện phân tích về tổng hợp không?
Theo kinh nghiệm của tôi khi làm việc với phân tích quảng cáo (thu thập hàng tỷ điểm dữ liệu về tổng hợp quảng cáo) là chìa khóa. Bạn thu thập dữ liệu thô, vệ sinh nó và sau đó đặt nó vào một cơ sở dữ liệu như MongoDB, Cassandra hoặc thậm chí MySQL cho phép bạn cập nhật và truy vấn. Sau đó, bạn định kỳ tổng hợp dữ liệu và loại bỏ nó khỏi cơ sở dữ liệu (nhưng lưu trữ dữ liệu thô, bạn có thể cần nó sau này).
Tổng hợp về cơ bản yêu cầu tất cả các câu hỏi mà bạn muốn hỏi về dữ liệu và lưu nó dưới dạng giúp dễ dàng truy xuất câu trả lời cho một câu hỏi cụ thể. Nói rằng bạn muốn biết ngày nào trong tuần có nhiều X. Việc thực hiện ngây thơ này sẽ là giữ cho tất cả các tín hiệu được ghi lại trong một bảng lớn và thực hiện một truy vấn tổng hợp tất cả các hàng có X. Là số lượng được thu thập tín hiệu phát triển truy vấn này sẽ mất nhiều thời gian hơn và lâu hơn. Không có số lượng lập chỉ mục, sharding hoặc tối ưu hóa sẽ giúp với điều này. Thay vào đó mỗi ngày/giờ/phút (tùy thuộc vào trường hợp sử dụng chính xác và cập nhật báo cáo của bạn), bạn nhìn vào các tín hiệu mới bạn đã ghi lại và cho mỗi X bạn tăng bộ đếm theo dõi số lượng X đã có vào thứ hai, nếu đó là một thứ hai, thứ ba nếu đó là một thứ ba và như vậy. Bằng cách đó bạn có thể sau này lấy số đếm cho mỗi ngày trong tuần và so sánh chúng. Bạn làm điều này cho tất cả các câu hỏi mà bạn muốn để có thể trả lời, và sau đó bạn loại bỏ các tín hiệu từ cơ sở dữ liệu (nhưng một lần nữa, giữ nguyên dữ liệu).
Loại cơ sở dữ liệu bạn ghi lại tập hợp có thể giống với loại bạn lưu trữ tín hiệu đến, nhưng không cần phải rất ưa thích. Nó sẽ lưu trữ các khóa đại diện cho một câu trả lời cụ thể và các giá trị thường chỉ là số.
Trong kho dữ liệu trường học cũ nói cơ sở dữ liệu bạn lưu trữ tín hiệu đến được gọi là OLTP (để xử lý giao dịch trực tuyến) và cơ sở dữ liệu bạn lưu trữ tập hợp trong được gọi là OLAP (cho xử lý phân tích trực tuyến).OLTP được tối ưu hóa để chèn và OLAP được tối ưu hóa cho truy vấn. Các điều khoản là cũ và khi mọi người nghe họ họ có xu hướng ngay lập tức nghĩ rằng SQL và starchemas và tất cả những điều đó. Có lẽ tôi không nên sử dụng chúng, nhưng chúng là những thuật ngữ thuận tiện.
Dù sao, đối với OLTP bạn muốn có thứ gì đó nhanh chóng chèn dữ liệu, nhưng cũng có thứ gì đó hỗ trợ lập chỉ mục dữ liệu và tìm kiếm mọi thứ. Việc tập hợp được giúp đỡ rất nhiều bởi một cơ sở dữ liệu mà làm một nửa công việc của tổng hợp và tìm tối đa và tối thiểu. Tôi thực sự thích MongoDB bởi vì nó rất dễ dàng để thiết lập và làm việc với. Dữ liệu tôi làm việc với xu hướng lộn xộn và không phải tất cả các mục đều có cùng một tập hợp các thuộc tính, do đó, sự tha thứ tha thứ của Mongo là một lợi ích. Mặt khác, dữ liệu của bạn có vẻ đồng nhất hơn nhiều, vì vậy Mongo có lẽ sẽ không mang lại cho bạn nhiều lợi ích. Tuy nhiên, đừng bỏ qua cơ sở dữ liệu quan hệ cũ tốt. Nếu bạn định thực hiện rất nhiều tính năng tổng hợp, v.v. thì SQL rất tuyệt, đó là những gì nó được xây dựng.
Đối với OLAP một cái gì đó đơn giản hơn nhiều công trình, một cửa hàng giá trị quan trọng là tất cả những gì bạn cần. Tôi sử dụng Redis vì nó cũng rất dễ làm việc và thiết lập. Nó cũng cho phép bạn lưu trữ nhiều hơn các giá trị vô hướng, thuận tiện. Đôi khi giá trị của bạn thực sự là một danh sách, hoặc một băm, trong hầu hết các cửa hàng giá trị khóa, bạn phải mã hóa các giá trị như vậy, nhưng Redis xử lý nó một cách tự nhiên. Nhược điểm của Redis là bạn không thể thực hiện các truy vấn ("như cung cấp cho tôi tất cả các hàng có giá trị này cho Y"), bạn phải tự mình lưu giữ các chỉ mục vào dữ liệu của mình. Mặt khác, bạn sẽ không cần chỉ số rất nhiều vì câu trả lời cho tất cả các câu hỏi của bạn đã được precomputed, tất cả những gì bạn cần làm là tìm kiếm câu trả lời bằng một khóa được xác định bởi câu hỏi. Đối với câu hỏi ở trên, ngày nào trong tuần có nhiều nhất X, bạn tra cứu số lượng công việc X vào thứ hai, thứ ba, v.v. có lẽ bạn đã lưu trữ chúng như X: thứ hai, X: thứ ba, v.v.
Trong kết luận: MongoDB và Redis hoạt động rất tốt cho tôi. Tôi không nghĩ MongoDB rất tốt cho trường hợp sử dụng của bạn, thay vào đó tôi nghĩ bạn thực sự có thể hưởng lợi nhiều hơn từ cơ sở dữ liệu SQL truyền thống (nhưng nó phụ thuộc, nếu dữ liệu của bạn thực sự đơn giản, bạn có thể sử dụng Redis). Điều quan trọng nhất là không mắc sai lầm khi nghĩ rằng bạn cần có dữ liệu trong một cơ sở dữ liệu và giữ nó mãi mãi. Tổng hợp và vứt bỏ dữ liệu cũ là chìa khóa.
Vậy tiêu chí lựa chọn của bạn là gì? Chỉ cần db nhanh như thế nào? Bạn đang tìm kiếm một tính năng cụ thể? Câu hỏi này rất mơ hồ. –
Đó là tất cả về độ tin cậy, khả năng mở rộng và tốc độ. Điều rất quan trọng là giải pháp dễ dàng cân bằng (MongoDB tự động?) Chỉ cần ném vào nhiều nút hơn, và tốc độ cũng rất quan trọng. – Juanda
Có liên quan? http://stackoverflow.com/questions/2892729/mongodb-vs-cassandra/2894665#2894665 –