2011-07-26 39 views
7

Tôi có một giải pháp có thể song song, nhưng tôi chưa (có) có kinh nghiệm với hadoop/nosql và tôi không chắc giải pháp nào là tốt nhất cho nhu cầu của tôi. Về lý thuyết, nếu tôi có CPU không giới hạn, kết quả của tôi sẽ trở lại ngay lập tức. Vì thế nên bất kỳ sự giúp đỡ nào cũng được đánh giá cao. Cảm ơn!truy vấn thời gian thực/tổng hợp hàng triệu bản ghi - hadoop? hbase? cassandra?

Dưới đây là những gì tôi có:

  • 1000s của bộ dữ liệu
  • phím số liệu:
    • tất cả các tập hợp dữ liệu có các phím cùng
    • 1.000.000 phím (sau này có thể là 10 hoặc 20 triệu đồng)
  • cột bộ dữ liệu:
    • mỗi bộ dữ liệu có các cột cùng
    • 10 đến 20 cột
    • nhất cột là giá trị số mà chúng ta cần để tổng hợp trên (avg, stddev, và sử dụng R để tính toán thống kê)
    • một vài cột là "type_id" cột, vì trong một truy vấn cụ thể chúng tôi có thể muốn chỉ bao gồm một số type_ids
  • ứng dụng web
    • người dùng có thể chọn dữ liệu ngay ETS họ quan tâm đến (bất cứ nơi nào 15-1000)
    • ứng dụng cần đến nay: chìa khóa, và kết quả tổng hợp (avg, stddev) của mỗi cột
  • cập nhật dữ liệu:
    • một toàn bộ số liệu có thể được thêm, bỏ hoặc thay thế/cập nhật
    • sẽ thật tuyệt vời để có thể thêm cột. Nhưng, nếu được yêu cầu, chỉ có thể thay thế toàn bộ tập dữ liệu.
    • không bao giờ thêm hàng/chìa khóa để một tập dữ liệu - do đó, không cần một hệ thống với rất nhiều nhanh chóng viết
  • cơ sở hạ tầng:
    • hiện hai máy với 24 lõi mỗi
    • cuối cùng, muốn khả năng cũng để chạy trên amazon

tôi không thể precompute giá trị tổng hợp của tôi, nhưng vì mỗi i chính độc lập, điều này sẽ dễ dàng mở rộng. Hiện tại, tôi có dữ liệu này trong cơ sở dữ liệu postgres, trong đó mỗi tập dữ liệu nằm trong phân vùng riêng của nó.

  • phân vùng đã được thoải mái, vì có thể dễ dàng thêm/thả/thay thế các phân vùng
  • cơ sở dữ liệu là tốt đẹp cho lọc dựa trên type_id
  • cơ sở dữ liệu không phải là dễ dàng để viết các truy vấn song song
  • cơ sở dữ liệu là tốt cho cấu trúc dữ liệu và dữ liệu của tôi không được cấu trúc

Như một bằng chứng của khái niệm tôi đã cố gắng ra hadoop:

  • tạo một tab tập tin tách ra mỗi bộ dữ liệu cho một type_id đặc biệt
  • tải lên HDFS
  • bản đồ: lấy ra một giá trị/cột cho mỗi phím
  • giảm: tính trung bình và độ lệch chuẩn

Từ chứng minh thô sơ của tôi, tôi có thể thấy điều này sẽ có quy mô độc đáo, nhưng tôi có thể thấy hadoop/hdfs có độ trễ mà tôi đã đọc rằng nó thường không được sử dụng để truy vấn thời gian thực (mặc dù tôi ổn với kết quả trả về cho người dùng trong 5 giây).

Bất kỳ đề xuất nào về cách tôi nên tiếp cận điều này? Tôi đang nghĩ đến việc thử HBase bên cạnh để cảm nhận điều đó. Tôi có nên nhìn vào Hive không? Cassandra? Voldemort?

cảm ơn!

Trả lời

6

Hive hoặc Pig dường như không giúp ích gì cho bạn. Về cơ bản, mỗi người trong số họ biên dịch xuống một hoặc nhiều công việc trên bản đồ/giảm, do đó phản hồi không thể trong vòng 5 giây

HBase có thể hoạt động, mặc dù cơ sở hạ tầng của bạn hơi nhỏ để đạt hiệu suất tối ưu. Tôi không hiểu tại sao bạn không thể tính toán trước các thống kê tóm tắt cho mỗi cột. Bạn nên tìm kiếm máy tính chạy trung bình để bạn không phải làm giảm cân nặng.

séc ra http://en.wikipedia.org/wiki/Standard_deviation

stddev (X) = sqrt (E [X^2] - (E [X])^2)

này ngụ ý rằng bạn có thể nhận được stddev của AB bằng cách thực hiện

sqrt (E [AB^2] - (E [AB])^2). E [AB^2] là (tổng (A^2) + tổng (B^2))/(| A | + | B |)

+0

Cảm ơn sự giúp đỡ. Có lẽ tôi không rõ vì sao tôi không thể tính toán trước được. Tôi đang tìm giá trị trung bình cho một khóa cụ thể và một cột cụ thể trong tập hợp dữ liệu (người dùng được chỉ định) không chính xác. Ví dụ: một người dùng có thể chọn 500 bộ dữ liệu, nhưng người dùng khác có thể chọn 500 bộ dữ liệu khác nhau. Mặc dù chúng tôi tính toán số liệu thống kê cho tất cả các khóa giống nhau và cho tất cả các cột giống nhau, các tập dữ liệu (tệp trong hadoop hoặc phân vùng trong cơ sở dữ liệu của tôi) là những biến thể. Cảm ơn. – anish

+0

@anish Đối với stddev và trung bình bạn có thể tính toán trước và lưu trữ đủ thông tin để kết hợp các bộ nhanh chóng - chỉ cần theo dõi tổng các giá trị, tổng của các ô vuông và tổng số. – cftarnas

+0

OK, tôi cảm thấy hơi dày đặc ở đây và tôi hoàn toàn mất tích cách dễ dàng tính toán trước dữ liệu. Tôi khiêm nhường… tôi có thể được giúp một chút không? Nếu tôi có 3 bộ dữ liệu (A, B, C) thì các combo có thể của tôi là: A, B, C, ABC, AB, BC. Tôi sẽ không cần phải tính toán trước cho tất cả các hoán vị? Với 1000 bộ dữ liệu, đây sẽ là rất nhiều dữ liệu. Ngoài ra, tôi sẽ cố gắng cải thiện hiệu suất truy xuất các giá trị cho các bộ dữ liệu cụ thể của tất cả các khóa bằng cách: truy vấn song song và có thể là phương pháp định hướng cột (cột = bộ dữ liệu và giá trị tương ứng). David, cảm ơn vì đã nói với tôi để thử HBase. cám ơn! – anish

2

Đây là vấn đề nghiêm trọng mà không giải pháp tốt trong không gian nguồn mở. Trong các cơ sở dữ liệu MPP không gian thương mại như greenplum/netezza nên làm. Lý tưởng nhất là bạn cần có Dremel của google (engine đằng sau BigQuery). Chúng tôi đang phát triển bản sao nguồn mở, nhưng sẽ mất một thời gian ... Bất kể động cơ nào được sử dụng, tôi nghĩ rằng giải pháp nên bao gồm việc giữ toàn bộ tập dữ liệu trong bộ nhớ - nó sẽ đưa ra ý tưởng về kích thước của cụm bạn cần.

2

Nếu tôi hiểu bạn một cách chính xác và bạn chỉ cần để tổng hợp trên các cột duy nhất tại một thời gian Bạn có thể lưu trữ dữ liệu của bạn khác nhau cho kết quả tốt hơn trong HBase đó sẽ giống như bảng mỗi cột dữ liệu trong thiết lập hiện nay và là đĩa đơn khác bảng cho các trường lọc (type_ids) hàng cho mỗi khóa trong thiết lập hôm nay - bạn có thể nghĩ cách kết hợp các trường bộ lọc vào khóa để lọc hiệu quả - nếu không bạn phải đọc hai giai đoạn (cột ) mỗi bảng trong thiết lập ngày nay (tức là vài nghìn cột) HBase không quan tâm nếu bạn thêm cột mới và thưa thớt theo nghĩa là nó không lưu trữ dữ liệu cho các cột không tồn tại. Khi bạn đọc một hàng bạn sẽ nhận được tất cả các giá trị có liên quan mà bạn có thể làm avg. vv khá dễ dàng

+0

Đây phải là câu trả lời đúng. – Suman

4

Vì dữ liệu của bạn có vẻ khá đồng nhất, tôi chắc chắn sẽ xem Google BigQuery - Bạn có thể nhập và phân tích dữ liệu mà không có bước MapReduce (trên một phần của bạn) và API RESTful sẽ trợ giúp bạn tạo một ứng dụng web dựa trên các truy vấn của bạn. Trong thực tế, tùy thuộc vào cách bạn muốn thiết kế ứng dụng của bạn, bạn có thể tạo ra một ứng dụng khá 'thời gian thực'.

0

Bạn có thể muốn sử dụng cơ sở dữ liệu cũ đơn giản cho việc này. Có vẻ như bạn không có hệ thống giao dịch. Kết quả là bạn có thể chỉ sử dụng một hoặc hai bảng lớn. SQL có vấn đề khi bạn cần tham gia qua dữ liệu lớn. Nhưng vì tập dữ liệu của bạn không có vẻ như bạn cần tham gia, bạn nên ổn. Bạn có thể thiết lập chỉ mục để tìm tập dữ liệu và thực hiện trong SQL hoặc toán ứng dụng.

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