@Alino4ka

Как лучше обрабатывать и записывать большой объем данных?

Доброго дня Коллеги.
Пишу один сервис по обработке входящих данных.
Данные имеют вид:
{sip:"1.1.1.1:11233", title:"test", value:"log"}

sip: это источник данных.
title: заголовок, с одним заголовком может прийти несколько данных для конкретного sip
value: сами данные (строка)

данные я буду хранить уникальные для каждого sip+title
допустим:
sip:1.1.1.1:11233, title:block, value:wr3333333333
sip:1.1.1.1:11233, title:block, value:wefwefwfwefew
sip:1.1.1.1:11233, title:view, value:ppppppp

тоесть для конкретного sip в title с одинаковым именем могут содержаться данные (value) разные.
мне нужны только уникальные данные! без повторов.

На php я бы выбрала следующую логику:
Данные при получение записываем в многомерный массив, пример:
$data_ara[$sip][$title][]=$value;
далее просто бы перед записью обработала массив убрав дубликаты для каждого title сформировала бы запрос insert и записала бы данные в mysql.


Но вот как поступить на node.js не знаю, как я поняла тут этот способ не канает совсем, ну не получилось у меня по крайней мере в многомерный массив никак писать данные как в php.

Подскажите знающие люди как быть?

ps: уточню, данные сразу не пишу по причине того что в секунду их может придти допустим 30-40, это очень много чтобы без разбора сразу куда-то их писать, логичнее их обработать и записать в одно действие раз в 5 секунд (допустим).
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Например так:

var myDataObject = {}
    , dataExample1 = { sip:"1.1.1.1:11233", title:"block", value:"val 1"}
    , dataExample2 = { sip:"1.1.1.1:11233", title:"block", value:"val 2"}
    , dataExample3 = { sip:"1.1.1.1:11233", title:"view", value:"val 3"}
;

addMyData = function(data){
    var exData = myDataObject[data.sip]
        , exTitle 
    ;

    if( !exData ){
        exData = myDataObject[data.sip] = { title: {} }
    }

    exTitle = exData.title[data.title];

    if( !exTitle ){
        exTitle = exData.title[data.title] = []
    }

    exTitle.push( data.value );
}

addMyData(dataExample1);
addMyData(dataExample2);
addMyData(dataExample3);

console.log(myDataObject);
console.info(JSON.stringify(myDataObject, null, 4));


Если значение может быть только одно и старые значения не нужны - то и массив не нужен, а сразу записывать его в tittle.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы