Key-Value store
Jun. 21st, 2014 04:02 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я что-то не втыкаю, прошу помощи зала. Я хочу хранить JSON объекты в какой-нибудь простой базе, при этом не хочу руками заводить индексы. Хочу чтобы база сама парсила объекты и если в нем есть какой-то ключ, то по этому ключу заводила бы сама индекс. То есть я скажем пишу туда { name: "Vasya", surname: "Pupkin" }, и она заводит два индекса, добавляю в какие-то объекты birthday: "02/20/1969" - она создает третий индекс. Объектов - ну максимум десятки тысяч, то есть в принципе все можно держать в голове. Хочется без тяжелого рантайма, инсталляций с триллионом prerequisites и прочего девопс-кошмара.
В принципе это наверное можно соорудить вокруг Редиски. Наверняка почти любая RDBMS с этим справится тоже. Но хочется избежать "сооружения" и не хочется таскать за собой постгресс с кучей зависимостей или мускль со своими капризами.
Можно это соорудить вокруг Дивана (Кауча), если написать внешний кауч-процесс, который будет следить за новыми объектами и добавлять индекс при необходимости. Наверное я так и сделаю, если не найду ничего лучше, Кауч хотя бы заметно проще большинства RDBMS по части зависимостей, но все равно надо лепить горбатого вокруг. Зато хорошая репликация достанется бесплатно.
Или я извращенец и никому это не надо?
В принципе это наверное можно соорудить вокруг Редиски. Наверняка почти любая RDBMS с этим справится тоже. Но хочется избежать "сооружения" и не хочется таскать за собой постгресс с кучей зависимостей или мускль со своими капризами.
Можно это соорудить вокруг Дивана (Кауча), если написать внешний кауч-процесс, который будет следить за новыми объектами и добавлять индекс при необходимости. Наверное я так и сделаю, если не найду ничего лучше, Кауч хотя бы заметно проще большинства RDBMS по части зависимостей, но все равно надо лепить горбатого вокруг. Зато хорошая репликация достанется бесплатно.
Или я извращенец и никому это не надо?
no subject
Date: 2014-06-21 11:41 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-06-22 12:04 am (UTC)name: "Vasya", surname: "Pupkin"
превратится в 2 записи в индексе:
name_Vasya
surname_Pupkin
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-06-22 12:49 am (UTC)no subject
Date: 2014-06-22 01:04 am (UTC)На нём работают например Active Directory, DNS server, Exchange, Windows Search, и ещё куча разного софта и компонент винды.
У записи может быть до 64k колонок, с кучей самых разных индексов по ним.
BTW, я когда-то запилил над ним ORM для .NET (https://esentserialize.codeplex.com/), давно не обновлял конечно, но исходники открыты.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-06-22 03:44 am (UTC)Только оно не key-value, а хранит именно что JSON объекты:
db.people.insert({ name: 'Vasya', surname: 'Poupkine'})
- это ванильный синтаксис.
формат "строки" - полностью свободный. Придет объект вида
{ name: 'Vasya', surname: 'Poupkine', birthday: '02/20/1969' }
- сохранится тоже
Соответственно, все поля доступны для запроса, и для поиска индексы специально строить не нужно:
db.people.find( { birthday: '02/20/1969' } );
найдёт всех родившихся в этот день (и у кого есть это свойство в коллекции).
Добавить день рождения существующему Васе - тоже не проблема.
Из коробки же по умолчанию всё держит в памяти - то есть, для производительности индексы тоже не очень-то и нужны, при десятках тысяч-то.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-06-22 07:09 pm (UTC)