2009-03-18 39 views
5

Tôi đã thực sự đấu tranh để biến SQL Server thành một cái gì đó, thẳng thắn, nó sẽ không bao giờ. Tôi cần một công cụ cơ sở dữ liệu cho công việc phân tích của tôi. DB cần phải nhanh chóng và KHÔNG cần tất cả việc ghi nhật ký và chi phí khác được tìm thấy trong các cơ sở dữ liệu điển hình (SQL Server, Oracle, DB2, v.v.)Các cửa hàng cột: So sánh các cơ sở dữ liệu dựa trên cột

Hôm qua tôi đã nghe Michael Stonebraker speak at the Money:Tech conference và tôi cứ nghĩ, "Tôi không Thật là điên rồ. Có cách nào tốt hơn! " Ông nói về việc sử dụng column stores thay vì cơ sở dữ liệu định hướng hàng. Tôi đã đi đến trang Wikipedia cho column stores và tôi thấy một vài dự án nguồn mở (mà tôi thích) và một vài dự án thương mại/nguồn mở (mà tôi không hiểu đầy đủ).

Câu hỏi của tôi là: Trong môi trường phân tích được áp dụng, cách khác nhau của cột dựa trên DB khác nhau? Làm thế nào tôi nên suy nghĩ về họ? Bất cứ ai cũng có kinh nghiệm thực tế với nhiều hệ thống dựa trên cột? Tôi có thể tận dụng trải nghiệm SQL của mình với các DB này không hay tôi có phải học một ngôn ngữ mới không?

Tôi cuối cùng sẽ lấy dữ liệu vào R để phân tích.

EDIT: Tôi đã được yêu cầu làm rõ một số chính xác những gì tôi đang cố gắng thực hiện. Vì vậy, đây là một ví dụ về những gì tôi muốn làm: Tạo một bảng có 4 triệu hàng và 20 cột (5 mờ, 15 sự kiện). Tạo 5 bảng tổng hợp tính tối đa, phút và trung bình cho mỗi sự kiện. Tham gia 5 tập hợp đó trở lại bảng bắt đầu. Bây giờ tính toán độ lệch phần trăm từ trung bình, độ lệch phần trăm của min và độ lệch phần trăm từ mức tối đa cho mỗi hàng và thêm nó vào bảng gốc. Dữ liệu bảng này không nhận được hàng mới mỗi ngày, nó được thay thế hoàn toàn và quá trình được lặp lại. Trời cấm nếu quá trình này phải được dừng lại. Và các bản ghi ... ohhhhh các bản ghi! :)

Trả lời

8

Câu trả lời ngắn gọn là đối với dữ liệu phân tích, cửa hàng cột sẽ có xu hướng nhanh hơn, ít yêu cầu điều chỉnh hơn.

Lưu trữ hàng, kiến ​​trúc cơ sở dữ liệu truyền thống, rất tốt khi chèn số hàng nhỏ, cập nhật hàng tại chỗ và truy vấn số hàng nhỏ. Trong một cửa hàng hàng, các hoạt động này có thể được thực hiện với một hoặc hai khối I/O.

Cơ sở dữ liệu phân tích thường tải hàng nghìn bản ghi tại một thời điểm; đôi khi, như trong trường hợp của bạn, họ tải lại tất cả mọi thứ. Chúng có xu hướng không chuẩn hóa, vì vậy có rất nhiều cột. Và tại thời điểm truy vấn, họ thường đọc một tỷ lệ cao các hàng trong bảng, nhưng chỉ một vài trong số các cột này. Vì vậy, nó có ý nghĩa từ một quan điểm I/O để lưu trữ các giá trị của cùng một cột với nhau.

Hóa ra điều này cho cơ sở dữ liệu một cơ hội lớn để thực hiện nén giá trị. Ví dụ, nếu một cột chuỗi có độ dài trung bình là 20 byte nhưng chỉ có 25 giá trị riêng biệt, cơ sở dữ liệu có thể nén đến khoảng 5 bit cho mỗi giá trị. Cơ sở dữ liệu lưu trữ cột thường có thể hoạt động mà không giải nén dữ liệu.

Thông thường trong khoa học máy tính có sự cân bằng I/O so với CPU, nhưng trong cột lưu trữ, cải tiến I/O thường cải thiện địa phương tham chiếu, giảm hoạt động phân trang bộ nhớ cache và cho phép các yếu tố nén lớn hơn. .

Cơ sở dữ liệu lưu trữ cột cũng có xu hướng có các tính năng định hướng phân tích khác như chỉ mục bitmap (một trường hợp khác cho phép nén tốt hơn, giảm I/O và cho phép thuật toán hiệu quả hơn), phân vùng và vật liệu lượt xem.

Yếu tố khác là liệu có nên sử dụng cơ sở dữ liệu khổng lồ (MMP) không. Có cơ sở dữ liệu lưu trữ hàng và lưu trữ cột MMP. Cơ sở dữ liệu MMP có thể mở rộng tới hàng trăm hoặc hàng nghìn nút và cho phép bạn lưu trữ lượng dữ liệu khổng lồ, nhưng đôi khi có sự thỏa hiệp như khái niệm giao dịch yếu hơn hoặc ngôn ngữ truy vấn không phải là SQL.

Tôi khuyên bạn nên dùng thử LucidDB. (Disclaimer: Tôi là một committer để LucidDB.) Nó là mã nguồn mở cửa hàng cơ sở dữ liệu cột, tối ưu hóa cho các ứng dụng phân tích, và cũng có các tính năng khác như các chỉ số bitmap. Nó hiện chỉ chạy trên một nút, nhưng sử dụng một số lõi hiệu quả và có thể xử lý khối lượng hợp lý của dữ liệu với nỗ lực không nhiều.

+0

Công cụ ETL dễ sử dụng nhất cho LucidDB là gì? Ấm đun nước? –

+1

JD, cuối cùng bạn đã thử dùng LucidDB từ R chưa? Liệu cách RJDBC làm việc liên tục với LucidDB? Quan tâm để biết kinh nghiệm của bạn. –

+0

Tôi đã viết so sánh các cơ sở dữ liệu định hướng cột khác nhau tại đây: http://www.timestored.com/time-series-data/column-oriented-databases –

0

Dường như thay đổi triển khai (mảng 2-D theo thứ tự cột lớn, thay vì thứ tự hàng lớn), thay vì thay đổi giao diện.

Hãy suy nghĩ mẫu "chiến lược", thay vì là toàn bộ sự thay đổi mô hình. Tất nhiên, tôi đã không bao giờ sử dụng những sản phẩm này, vì vậy họ có thể trong thực tế buộc một mô hình chuyển xuống cổ họng của bạn. Tôi không biết tại sao.

0

Chúng tôi có thể giúp bạn đạt được quyết định sáng suốt hơn nếu bạn mô tả [1] mục tiêu cụ thể của mình và [2] các vấn đề bạn đang gặp phải với SQL Server.

+0

chỉnh sửa được thêm .. cảm ơn bạn đã đọc! –

2

Tôi có một số trải nghiệm với phiên bản Cộng đồng Infobright --- cột hoặc. db, dựa trên mysql.

Pro:

  • bạn có thể sử dụng giao diện mysql/trình điều khiển mysql odbc, từ R quá
  • truy vấn đủ nhanh trên khối lớn của lựa chọn dữ liệu (vì KnowledgeGrid gói & dữ liệu)
  • rất nhanh trình tải dữ liệu gốc và các đầu nối cho ETL (talend, kettle)
  • tối ưu hóa chính xác hoạt động mà tôi (và tôi nghĩ rằng hầu hết chúng ta) sử dụng (lựa chọn theo mức hệ số, tham gia v.v.)
  • đặc biệt "tra cứu" lựa chọn cho tối ưu hóa lưu trữ các biến yếu tố R;) (ok, biến char/varchar với mức độ tương đối nhỏ số/hàng số)
  • FOSS
  • trả tùy chọn hỗ trợ
  • ?

Nhược điểm:

  • không có hoạt động chèn/cập nhật trong phiên bản cộng đồng (chưa?), Dữ liệu tải chỉ qua bản địa kết nối nạp dữ liệu/ETL
  • không utf-8 hỗ trợ chính thức (đối chiếu/sắp xếp vv), được lên kế hoạch cho q3 2009
  • không có chức năng nào trong truy vấn tổng hợp fe chọn tháng (ngày) từ ...), nhưng được lên kế hoạch cho tháng 7 (?) 2009, nhưng do lưu trữ cột, tôi chỉ đơn giản tạo cột ngày cho mọi cấp độ tổng hợp (số tuần, tháng, ...) Tôi cần
  • không thể cài đặt trên máy chủ mysql hiện tại làm công cụ lưu trữ (vì tôi ưu tiên riêng, nếu tôi hiểu chính xác), nhưng bạn có thể cài đặt Infobright & mysql trên các cổng khác nhau nếu bạn cần
  • ?

Tiếp tục: Giải pháp FOSS tốt cho công việc phân tích hàng ngày và tôi cũng nghĩ rằng nhiệm vụ của bạn là tốt.

+0

Việc thiếu các tùy chọn chèn/cập nhật trên ấn bản cộng đồng là một khuyết tật nghiêm trọng, làm cho nó thực tế vô dụng đối với hầu hết các ứng dụng. Tôi đã đặt phiên bản Cộng đồng InfoBright vào danh mục "Đồ phụ trợ". "Enterprise Edition" không chèn, nhưng bạn chỉ có 30 ngày để đánh giá nó - và sau đó bạn phải bỏ ra $ 17.000 cho một giấy phép, mỗi năm, mỗi năm. – Contango

+0

Vâng nó thực sự không phải là quá khủng khiếp trên một số nhiệm vụ – zzr

+0

Vâng nó thực sự là không khủng khiếp về một số nhiệm vụ. Chúng tôi sử dụng ICE làm siêu dữ liệu để báo cáo với một số quy trình ETL, xử lý cập nhật hàng loạt và thêm trường hợp. Nhưng làm việc với các kích thước thay đổi từ từ, v.v. có một chút tê liệt. – zzr

3

4 triệu hàng gấp 20 cột lần 8 byte cho giá trị gấp đôi là 640 mb. Theo quy tắc ngón tay cái mà R tạo ra ba bản sao tạm thời cho mỗi đối tượng, chúng tôi nhận được khoảng 2 gb. Đó không phải là rất nhiều theo tiêu chuẩn ngày nay.

Vì vậy, điều này sẽ có thể thực hiện được trong bộ nhớ trên máy 64 bit phù hợp với số lượng 'khá' ram (nói 8 gb hoặc hơn). Cài đặt Ubuntu hoặc Debian (có thể trong phiên bản máy chủ) có thể được thực hiện sau vài phút.

+0

Chết tiệt bạn Dirk, bạn thực sự đã làm toán! ;) Tôi dự đoán kích thước mở rộng, nhưng bạn có thể đúng rằng chỉ cần đến 64 bit sẽ cho phép tôi mở rộng quy mô tốt. –

1

Đây là 2 xu của tôi: máy chủ SQL không mở rộng tốt. Chúng tôi đã cố gắng sử dụng máy chủ SQL để lưu trữ dữ liệu tài chính trong thời gian thực (tức là giá đã đến trong 100 ký hiệu). Nó hoạt động hoàn hảo trong 2 tuần đầu tiên - sau đó nó diễn ra chậm hơn và chậm hơn khi kích thước cơ sở dữ liệu tăng lên, và cuối cùng dừng lại, quá chậm để chèn từng giá khi nó được nhận. Chúng tôi đã cố gắng làm việc xung quanh nó bằng cách di chuyển dữ liệu từ cơ sở dữ liệu đang hoạt động sang lưu trữ ngoại tuyến mỗi tối, nhưng cuối cùng dự án đã bị hủy bỏ vì nó không hoạt động.

Điểm mấu chốt: nếu bạn dự định lưu trữ nhiều dữ liệu (> 1GB), bạn cần cái gì đó có tỷ lệ chính xác và điều đó có nghĩa là cơ sở dữ liệu cột.

+0

SQL Server 2012 sẽ có [chỉ mục columnstore] (http://msdn.microsoft.com/en-us/library/gg492088 (v = sql.110) .aspx) – russellkt

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