Đối với một chút nền - câu hỏi này đề cập đến một dự án đang chạy trên một cá thể EC2 nhỏ và sắp chuyển sang một phương tiện trung bình. Các thành phần chính là Django, MySQL và một số lượng lớn các công cụ phân tích tùy chỉnh được viết bằng python và java, làm việc nâng hạng nặng . Cùng một máy đang chạy Apache.Chuyển từ MySQL sang Cassandra - Ưu điểm/Nhược điểm?
Mô hình dữ liệu trông giống như sau - một lượng lớn dữ liệu thời gian thực được truyền trực tiếp từ các cảm biến mạng khác nhau và lý tưởng là tôi muốn thiết lập một cách tiếp cận thăm dò ý kiến dài hơn là cuộc thăm dò hiện tại mỗi 15 phút tiếp cận (giới hạn số liệu thống kê máy tính và viết vào cơ sở dữ liệu). Khi dữ liệu xuất hiện, tôi lưu trữ phiên bản thô trong MySQL, để các công cụ phân tích mất dữ liệu này và lưu trữ số liệu thống kê trong một vài bảng khác. Tất cả điều này được trả lại bằng cách sử dụng Django.
tính năng Relational tôi sẽ cần -
- Sắp xếp theo [SliceRange trong API Cassandra dường như satisy này]
- Đoàn tự do
- quan hệ Manytomany giữa nhiều bảng [Cassandra SuperColumns dường như làm tốt cho một đến nhiều]
- Nhân sư trên điều này mang lại cho tôi một công cụ văn bản đầy đủ, vì vậy đó cũng là một điều cần thiết. [Trên Cassandra, dự án Lucandra dường như đáp ứng nhu cầu này]
Vấn đề chính của tôi là đọc dữ liệu cực kỳ chậm (và viết không nóng). Tôi không muốn ném rất nhiều tiền và phần cứng vào nó ngay bây giờ, và tôi muốn cái gì đó có thể mở rộng dễ dàng theo thời gian. Theo chiều dọc mở rộng MySQL không phải là tầm thường theo nghĩa đó (hoặc rẻ).
Vì vậy, về cơ bản, sau khi đã đọc rất nhiều về NoSQL và thử nghiệm với những thứ như MongoDB, Cassandra và Voldemort, câu hỏi của tôi là,
Trên một thể EC2 trung bình, tôi sẽ đạt được bất kỳ lợi ích trong đọc/ghi bằng cách chuyển sang một cái gì đó như Cassandra? This article (pdf) chắc chắn dường như gợi ý điều đó. Hiện tại, tôi muốn nói vài trăm bài viết mỗi phút sẽ là chuẩn mực. Đối với các lần đọc - vì dữ liệu thay đổi sau mỗi 5 phút hoặc lâu hơn, việc mất hiệu lực bộ nhớ cache phải diễn ra khá nhanh. Tại một số điểm, nó sẽ có thể xử lý một số lượng lớn người dùng đồng thời là tốt. Hiệu suất ứng dụng hiện đang bị giết trên MySQL thực hiện một số phép nối trên các bảng lớn ngay cả khi các chỉ mục được tạo - thứ gì đó theo thứ tự của hàng 32k mất hơn một phút để hiển thị. (Đây có thể là một tạo phẩm của EC2 được ảo hóa I/O). Kích thước của bảng là khoảng 4-5 triệu hàng, và có khoảng 5 bảng như vậy.
Mọi người đều nói về việc sử dụng Cassandra trên nhiều nút, với định lý CAP và tính nhất quán cuối cùng. Tuy nhiên, đối với một dự án mới chỉ bắt đầu phát triển, có ý nghĩa không để triển khai một máy chủ cassandra một nút? Có bất kỳ cảnh báo nào không? Ví dụ, nó có thể thay thế MySQL như là một phụ trợ cho Django? [Đây có phải là khuyến cáo không?]
Nếu tôi thay đổi, tôi đoán tôi sẽ phải viết lại các phần của ứng dụng để thực hiện nhiều hơn nữa "quản trị" vì tôi phải thực hiện nhiều lần tra cứu để tìm nạp hàng .
Nó sẽ làm cho bất kỳ ý nghĩa để chỉ cần sử dụng MySQL như một cửa hàng giá trị quan trọng chứ không phải là một cơ quan hệ, và đi với điều đó? Bằng cách đó tôi có thể sử dụng một số lượng lớn các API ổn định có sẵn, cũng như một công cụ ổn định (và đi quan hệ khi cần thiết). (Bài đăng của Brett Taylor từ nguồn cấp dữ liệu cho bạn bè về điều này - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
Bất kỳ thông tin chi tiết nào từ những người đã thực hiện ca làm việc sẽ được đánh giá cao!
Cảm ơn.
Tôi khá tò mò nếu bạn đã chuyển sang Cassandra. Tôi đã trên các tuyến đường chuyển đổi từ php và asp.net để django nhưng tôi không chắc chắn nếu là sớm để di chuyển từ mssql và mysql để Cassandra ngay bây giờ. Tôi cũng có hàng trăm bản ghi mỗi giây. – avatar
@itgorilla - Tôi sử dụng cassandra cho một nhiệm vụ rất cụ thể, nơi nó đang hoạt động tốt. Tôi nhận ra rằng việc sử dụng nó cho các cơ sở dữ liệu "chuyển động" có lẽ không phải là một ý tưởng tốt, và kết quả của tôi xác nhận rằng (tôi đồng ý với câu trả lời của codemonkey dưới đây). Vì vậy, nếu bạn muốn thực sự nhanh chóng viết, tìm kiếm và dữ liệu không chuẩn hóa và bạn muốn quy mô, Cassandra là một lựa chọn khá tốt. (Số đầu sẽ được nói, một vài triệu viết một phút!) – viksit
Kiểm tra dự án Django Cassandra này nếu bạn quan tâm: https://github.com/vaterlaus/django_cassandra_backend – Alex