2012-05-10 2 views
19

Мне нравится пользовательский опыт кубизма и хотел бы использовать его поверх бэкэнда, который у нас есть.Использование других источников данных для cubism.js

Я читал документы API и некоторые из них, большинство из них, похоже, было удалено. Как я мог начать использовать другие источники данных?

У меня есть хранилище данных около 6 тыс. Индивидуальных машин с точностью до 5 минут со скоростью около 100 или около того.

Я хотел бы запросить некоторое веб-приложение с определенным идентификатором для этого компьютера, а затем визуализировать панель, похожую на кубизм, путем запроса определенного хранилища данных mongo.

Написание webapp или запрос на монго не являются проблемой.

Проблема в большей степени соответствует тому факту, что кубизм, как представляется, требует запроса любого хранилища данных, которое вы используете для каждой отдельной точки данных (скажем, что у вас есть 100 статистических данных в окне недели ... дорого).

Есть ли другой способ, которым я мог бы использовать этот инструмент, чтобы посмотреть на данные, которые загружаются, используя что-то похожее на код ниже?

var data = []; 
d3.json("/initial", function(json) { data.concat(json); }); 
d3.json("/update", function(json) { data.push(json); }); 

ответ

19

кубизм заботится о инициализации и обновления для Вас: первоначальный запрос является полное видимое окно (начало останавливаться, обычно +1440 точек данных), в то время как последующие запросы только в течение нескольких последних показателей (7 данных точки).

Посмотрите на context.metric, как реализовать новый источник данных. Самая простая реализация, как это:

var foo = context.metric(function(start, stop, step, callback) { 
    d3.json("/data", function(data) { 
    if (!data) return callback(new Error("unable to load data")); 
    callback(null, data); 
    }); 
}); 

Вы бы расширить это изменить «/ данные» URL в случае необходимости, проходя в начале, остановка и шаг раза, и все, что вы хотите использовать для идентификации метрика. Например, как Cube, так и Graphite используют метрическое выражение в качестве дополнительного параметра запроса.

+0

просто убедитесь, что это предназначено для каждой новой метрики. Таким образом, каждый клиент, подключенный к этому, будет делать x запросов в вашей базе данных для х-показателей. Нет простого способа, используя сокращение кубизма? например, вызов диаграммы, а затем наличие функции доступа? –

+1

Несомненно, вы можете написать альтернативную метрическую реализацию, которая извлекает несколько показателей в пакете, но обычно это не стоит. Наши панели часто делают сотни одновременных запросов на Graphite (которые частично обрабатываются браузером, так как не будут содержать более 4 или 8 одновременных запросов на хост), и проблема с производительностью не возникает. Чтобы объединить параллельные запросы, вы ставили несколько запросов в очередь и использовали таймаут для создания комбинированного запроса. – mbostock

+0

Просто, чтобы запустить его кем-то другим, чей опыт в этой области, скажите мне, если вы думаете, что это того стоит: у меня около 500 ГБ данных о n машинах. Db индексируется по метке времени, идентификатору машины и комбинации двух. Чтобы сделать один запрос (это MongoDB), требуется около 12 секунд, чтобы получить отсортированный список из 1440 результатов для 1 машины. Итак, x * 12 секунд = время загрузки, где x - количество показателей. –

Смежные вопросы