Kho dữ liệu: Làm thế nào tôi có thể truy vấn ảnh chụp nhanh hàng ngày?


9

Tôi có một số ảnh chụp nhanh của cơ sở dữ liệu không phải là thời gian. Ví dụ:

  • Ảnh chụp ngày 1:

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
    
  • Ảnh chụp ngày 2 (Một bài đăng mới được thêm vào hôm nay):

    +----+----------------+------------+------------+        
    | ID |      Title     |  Category  |    Date    |
    +----+----------------+------------+------------+
    | 1  | My first post  | helloworld | 2015-01-01 |
    | 2  | My second post | other      | 2015-01-02 |
    +----+----------------+------------+------------+
    
  • Ảnh chụp ngày 3 (Bài 2 bị xóa hôm nay):

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
    

Vì vậy, giữa các ngày, một hàng của bảng có thể hoặc không có thể là hằng số. Bây giờ, tôi cần có thể sử dụng một truy vấn như thế này:

SELECT category, COUNT(*) from day1.My_table group by category

Đây là cho một bảng của một ngày. Nếu chúng ta muốn tính trung bình hàng ngày của các bài đăng theo danh mục trong một tháng, chúng ta nên làm một cái gì đó như:

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*) as cnt 
    from day1.My_table 
    group by category 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day2.My_table 
                  group by category 
        UNION ALL ... 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day30.My_table 
                  group by category
) group by category

Một ví dụ khác, số lượng bài đăng được xuất bản trong một tháng :

SELECT COUNT(distinct id) 
from ( 
    SELECT id 
    from day1.My_table 
    UNION ALL ... 
    UNION ALL SELECT id 
              from day30.My_table
) 

Về cơ bản chúng ta sẽ cần phải xem xét một trọng lượng. Nếu chúng ta có day1.My_table và day5.My_table, mọi bài đăng trong day1 và không trong day5 sẽ được tính như trong ngày 2,3,4. Mỗi bài đăng là day1 và day5 sẽ được tính như thể nó là vào mỗi ngày trong tháng (= cho đến ảnh chụp nhanh tiếp theo).

Vì vậy, trong trường hợp tôi muốn xem xét số lượng bài đăng trung bình mỗi ngày> = 6 tháng một lần, trong đó tôi chỉ có 1 ảnh chụp nhanh, tôi sẽ chỉ định cho ảnh chụp nhanh đó có trọng lượng 30.

Vì vậy, bài đăng trung bình được xuất bản trong một tháng cho một phạm vi> = 6 tháng trước là:

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*)*30 as cnt 
    from day1.My_table 
    group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;

Như bình luận cũng đã nêu, tôi sẽ cần phải thực hiện một truy vấn như:

Select category, AVG(*) 
from [fromRange-toRange].MyTable; 

Đối với một giải pháp cực đoan, tôi đang xem xét ý tưởng triển khai một ngôn ngữ kim loại để cho phép người dùng trong tương lai (ví dụ như người tiếp thị) thực hiện một truy vấn như thế này.

Bạn có nghĩ rằng có một cách để thực hiện điều này trong Khoan mà không cần ngôn ngữ meta? Tôi sẽ làm điều này bằng cách sử dụng UDF đệ quy nhưng họ không thể trả về các truy vấn.

Mỗi ảnh chụp nhanh có dung lượng lớn 250 GB và tôi muốn có thể so sánh các tập dữ liệu này với các dữ liệu bên ngoài khác (tôi không biết trước sơ đồ của các tập dữ liệu này).

Có một giải pháp phù hợp cho Apache Drill không? Hoặc có một giải pháp khác cho vấn đề này?

Ngoài ra, bất kỳ ngôn ngữ meta hoặc giấy về vấn đề này đều được đánh giá cao.

Chỉnh sửa: Chúng tôi chưa có dữ liệu giao dịch. Chúng tôi có dữ liệu thay đổi theo thời gian và có thể được thêm hoặc xóa; vì lý do này, chúng tôi cần ảnh chụp nhanh hàng ngày. Ngoài ra, chúng tôi không biết trước các truy vấn sẽ được thực hiện, vì vậy chúng tôi không thể biết loại tổng hợp nào sẽ được thực hiện. Ngoài ra, mỗi hàng có khoảng 100 cột và có khoảng 250 GB cho mỗi ảnh chụp nhanh (bảng Mysql). Chúng tôi cũng cần tìm kiếm toàn văn trên dữ liệu này trên mỗi hàng, vào mỗi ngày có thể.

Một ví dụ về tìm kiếm có thể là "Có bao nhiêu bài viết về đôi khi?" Vì vậy, nó phải tìm kiếm tất cả các bài viết cho từ khóa đôi khi. Mỗi ảnh chụp có thể có hoặc không có cùng hàng. Ngoài ra hai ảnh chụp nhanh có thể có cùng một bài, nhưng sửa đổi một chút.


Có vẻ như bạn có một cấu trúc tốt cho dữ liệu của mình .. có lý do cụ thể nào khiến bạn tìm kiếm một giải pháp không có sơ đồ không? Theo sơ đồ tôi giả sửtable definitions/structures
vmachan

Bởi vì tôi không muốn xác định các bảng mới trước khi tải bộ dữ liệu của mình. Chắc chắn nếu có một giải pháp có thể xử lý vấn đề này nhưng cần phải xác định trước bảng thì tôi sẽ chọn nó.
Federico Ponzi

Ảnh chụp nhanh hàng ngày 250GB? Với những yêu cầu đó? Làm sao?
Tom V - thử topanswers.xyz

Tại sao ảnh chụp nhanh hàng ngày? Bao nhiêu trong số 250 GB thay đổi một ngày? Có gì sai với cách tiếp cận Kích thước thay đổi chậm?
vào

Xin đừng nghĩ vấn đề này về mặt lưu trữ dữ liệu, nhưng về cách truy vấn và / hoặc dữ liệu lớn. Tôi có các ảnh chụp nhanh hàng ngày khác nhau về cơ sở dữ liệu của mình và tôi muốn có một cách để truy vấn chúng một cách hiệu quả.
Federico Ponzi

Câu trả lời:


2

Hãy nghĩ ra khỏi hộp. Thay vì có một "ảnh chụp nhanh", hãy có một "nhật ký". Những gì bạn hiện đang có là tình trạng "hiện tại" của sự vật; thêm "nhật ký" sẽ cung cấp "lịch sử", từ đó có thể lấy được thông tin 'mất'.

Một cách để thực hiện các bản ghi là phải có một TRIGGERtrên INSERThoặc UPDATEcủa bảng, và có ghi kích hoạt vào file log. Nhật ký này sẽ không dễ chịu đối với các truy vấn đặc biệt, vì vậy hãy có một công việc hàng đêm (hoặc có thể hàng giờ) để tóm tắt các thay đổi trong ngày - lãi ròng (hoặc mất) của số lượng bài đăng, v.v. Thông tin "day2" và thông tin "tháng trước" sau đó có thể được lấy từ bảng tóm tắt này khá nhanh. Hoặc có lẽ một mức độ tóm tắt thứ hai tuyên bố những gì nhà nước dành cho mỗi ngày. Tôi nghi ngờ nếu UNIONcần thiết. "Ảnh chụp nhanh" sẽ không được tham gia.


1
Tôi đã hỏi về cách truy vấn ảnh chụp nhanh hàng ngày, bạn chỉ nói về việc tối ưu hóa - tôi sẽ nghĩ về nó sau. Cảm ơn
Federico Ponzi

1
Ảnh chụp nhanh rất khó xử lý (theo ý kiến ​​của tôi), vì vậy tôi đã cố gắng trình bày một cách để giải quyết vấn đề 'thực tế' thay vì bị vướng vào một giải pháp khó khăn. Ngoài ra, tóm tắt sẽ cho phép các truy vấn nhanh hơn đáng kể.
Rick James

2

Vì vậy, những gì tôi đang tìm kiếm, là một loại hệ thống mới có liên quan đến Datwarhousing: Data Lake System.

Bạn có thể tìm hiểu thêm trên Wikipedia :

Hồ dữ liệu là một phương pháp lưu trữ dữ liệu trong một hệ thống tạo điều kiện cho việc sắp xếp dữ liệu trong các lược đồ biến thể và các dạng cấu trúc, thường là các đốm màu hoặc các tệp đối tượng. Hadoop và nền tảng AWS S3 có thể được sử dụng để xây dựng kho lưu trữ dữ liệu hồ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.