2015-04-24 20 views
5

Đối với trường hợp của tôi, tôi cần chụp 15 chỉ số hiệu suất cho thiết bị và lưu nó vào InfluxDB. Mỗi thiết bị có một id thiết bị duy nhất.Hiệu suất của InfluxDB

Số liệu được ghi vào InfluxDB theo cách sau. Ở đây tôi chỉ hiển thị một ví dụ như

new Serie.Builder("perfmetric1") 
    .columns("time", "value", "id", "type") 
    .values(getTime(), getPerf1(), getId(), getType()) 
    .build() 

Ghi dữ liệu nhanh và dễ dàng. Nhưng tôi thấy hiệu suất kém khi chạy truy vấn. Tôi đang cố gắng nhận được tất cả 15 giá trị chỉ số trong một giờ qua.

select value from perfmetric1, perfmetric2, ..., permetric15 
where id='testdeviceid' and time > now() - 1h 

Đối với một tiếng đồng hồ, mỗi chỉ số có 120 điểm dữ liệu, trong tổng số đó là 1800 điểm dữ liệu. Truy vấn mất khoảng 5 giây trên phiên bản c4.4xlarge EC2 khi không hoạt động.

Tôi tin rằng InfluxDB có thể làm tốt hơn. Đây có phải là vấn đề về thiết kế lược đồ của tôi hay không? Chia tách truy vấn thành 15 cuộc gọi song song có đi nhanh hơn không?

Trả lời

2

Tạo chỉ mục trên cột id. Dường như anh ta sử dụng công cụ quét toàn bộ trên bảng để lấy dữ liệu. Bằng cách tách truy vấn của bạn trong 15 chủ đề, công cụ sẽ sử dụng 15 lần quét toàn bộ và hiệu suất sẽ tồi tệ hơn nhiều.

+0

Cảm ơn bạn đã phản hồi nhanh! Tôi khá mới với InfluxDB, về cơ bản chỉ là thử nghiệm. Tất cả đều có ý nghĩa. Tôi hơi ngạc nhiên vì đây có vẻ là một trường hợp sử dụng rất phổ biến. Lập chỉ mục thẻ là điều gì đó mới mẻ đối với phiên bản 0.9.0 - Tôi đang chạy phiên bản 0.8.8 ổn định tại thời điểm này. "Để bật những thứ như thẻ và tra cứu nhanh trên các giá trị cột cụ thể, chúng tôi sẽ thêm hỗ trợ cho chỉ mục cột. Dưới đây là vấn đề theo dõi chỉ mục cột". –

+0

phần mềm ở trạng thái phát triển alpha nên rất nhiều thứ bị thiếu và rất nhiều lỗi – valentin

4

Khi câu trả lời @valentin cho biết, bạn cần tạo chỉ mục cho cột id cho InfluxDB để thực hiện các truy vấn này một cách hiệu quả.

Trong 0.8 độ ổn định, bạn có thể thực hiện "lập chỉ mục" này bằng cách sử dụng continuous fanout queries. Ví dụ, truy vấn liên tục sau đây sẽ mở rộng chuỗi perfmetric1 của bạn thành nhiều loạt các hình thức perfmetric1.id:

select * from perfmetric1 into perfmetric1.[id]; 

Sau đó bạn sẽ làm gì:

select value from perfmetric1.testdeviceid, perfmetric2.testdeviceid, ..., permetric15.testdeviceid where time > now() - 1h 

Truy vấn này sẽ mất ít nhiều thời gian để hoàn thành kể từ InfluxDB sẽ không phải thực hiện quét toàn bộ các bộ đếm thời gian để nhận điểm cho mỗi testdeviceid.