Key-Value store

Jun 21, 2014 16:02

Я что-то не втыкаю, прошу помощи зала. Я хочу хранить JSON объекты в какой-нибудь простой базе, при этом не хочу руками заводить индексы. Хочу чтобы база сама парсила объекты и если в нем есть какой-то ключ, то по этому ключу заводила бы сама индекс. То есть я скажем пишу туда { name: "Vasya", surname: "Pupkin" }, и она заводит два индекса, ( Read more... )

sd

Leave a comment

Comments 26

plumqqz June 21 2014, 23:41:11 UTC
sqlite возьмите. Или Apache Derby, если жаба. Хотя это скорее для ищущих легких путей.

Reply

kika June 22 2014, 00:49:11 UTC
Дерби это совсем за гранью, это еще и явскую машину с собой таскать.
Скулайт вполне годится, но вокруг него все равно придется огород городить. Хочется готовенького.

Reply

plumqqz June 22 2014, 00:56:24 UTC
А что, разложить джсон по трем таблицам - это уже сложно? (Да, собственно, даже по одной). Если сложно - то тогда ой, конечно.

Reply

kika June 22 2014, 01:04:37 UTC
Не то чтоб сложно конечно. Но если пейсать какую-то миддлварь, которая это будет делать, то обычным JSON.parse не обойдешься, надо делать то и это. А хочется просто, грубо говоря POST "{name: "xxx", surname: "yyy"}, а потом GET /name=xxx

Reply


ircicq June 22 2014, 00:04:44 UTC
Проще 1-м индексом вида key_value обойтись.

name: "Vasya", surname: "Pupkin"
превратится в 2 записи в индексе:
name_Vasya
surname_Pupkin

Reply

kika June 22 2014, 00:37:24 UTC
А как тогда найти всех Вась?

Reply

ircicq June 22 2014, 00:53:10 UTC
SELECT object FROM index_table JOIN objects ON objects.id=objectid WHERE key = 'name_Vasya'

Если у нас 2 связанные таблицы: objects(id, object) и index_table(key, objectid)

Reply

kika June 22 2014, 01:02:00 UTC
А, когда коммент в ЖЖ, то понятно :-) В емейле он склеился в name_Vasya surname_Pupkin. Я решил что это одна строка и удивился.

Reply


(The comment has been removed)

kika June 22 2014, 00:35:24 UTC
Как все сделать самому я и сам понимаю. Обычно если надо все делать самому то при нынешнем уровне развития индустрии это означает что я что-то не то придумал. При чем тут жена и твои фантазии я не понял.

Reply

evolver June 22 2014, 00:45:46 UTC
Про готовые решения я не в курсе. Ну а про ролевую игру я шутил, извини.

Reply


ex_juan_gan June 22 2014, 00:49:41 UTC
Я на эту тему крепко сейчас думаю; предлагаю держать в простой реляционной базе, а ключи сплющивать.

Reply


soonts June 22 2014, 01:04:31 UTC
В коропке с любой вендой начиная с 2000 есть ESENT - это такой NoSQL, который придумали и сделали ещё до того, как NoSQL стало круто.
На нём работают например Active Directory, DNS server, Exchange, Windows Search, и ещё куча разного софта и компонент винды.

У записи может быть до 64k колонок, с кучей самых разных индексов по ним.

BTW, я когда-то запилил над ним ORM для .NET, давно не обновлял конечно, но исходники открыты.

Reply

kika June 22 2014, 01:10:45 UTC
Прикольно, всегда было интересно на чем AD базируется, но лень было гуглить. К сожалению, жениться на винде я не хочу.

Reply

soonts June 22 2014, 01:22:16 UTC
Дело ваше конечно.
Но по моим данным, в мире не-винды ничего сопоставимого по функциональности и производительности вы не найдёте, и за разумное время сами не запилите.

Там производительность сотни тыщ запросов в секунду, масштабируемость на много ядер, много памяти и много терабайт базы (при этом оно и вниз масштабируется, т.е. без нагрузки почти ничего не отжирает), устойчивость к сбоям, транзакционность, и другие достоинства.

Reply

kika June 22 2014, 01:23:48 UTC
Да я сам по себе ничего против винды не имею, если ее администрировать не надо (вот уж что кошмар девопса-то), но к сожалению подавляющее большинство целевых платформ - это скорее линукс чем что бы то ни было еще.

Reply


Leave a comment

Up