LINUX.ORG.RU

Кей-валуе хранилище в файлах

 , ,


0

1

Собственно сабж. Я уже навелосипедил своё конечно, так как дело пары часов, но хотелось бы узнать существующие решения на пыхе есть какие? Кто сталкивался? Юзал?

Кейс примитивный - хранить до 1-2 сотен ключей это потолок. По факту пара десятков.

P.S. Я для лучшего понимания объясню еще почему вопрос вообще возник:
Я короче навелосипедил это вчера под пол бутылки Капитана моргана и еще треть Гавана Клаб. Оно-то работает, но я смотрю сейчас в код и в ужасе.

★★★★★

Последнее исправление: Suntechnic (всего исправлений: 1)
Ответ на: комментарий от Apple-ch

Я не о формате файла (я вообще юзаю var_export для массива). Я о самой обвязке. О готовом полностью решении вместе c каким-нибудь API.

Suntechnic ★★★★★
() автор топика
Последнее исправление: Suntechnic (всего исправлений: 1)
Ответ на: комментарий от Suntechnic

sqlite — медленно на 20 ключах?

Нет, для любителей nosql уже давно придумали berkeley db, но sqlite популярнее. Можно забить на файлы и заюзать memcached, в конце концов.

Ещё есть webscale™-решения вроде mongodb, но у них другой юзкейс

x3al ★★★★★
()
Ответ на: комментарий от x3al

sqlite — медленно на 20 ключах?

Медленно «подключение» к самой sqlite.

Нет, для любителей nosql уже давно придумали berkeley db, но sqlite популярнее. Можно забить на файлы и заюзать memcached, в конце концов.

На любом шареде. Важна переносимость.

Ещё есть webscale™-решения вроде mongodb, но у них другой юзкейс

Я обычно юзаю Redis - больше всех нравится. Но смотри ответ на цитату выше.

Suntechnic ★★★★★
() автор топика

parse_ini_file говорили?

alix ★★★★
()
Ответ на: комментарий от fish_ka

Это какой? Мне надо-то по сути - Get/Set/Save. Не нужны деревья, не нужны деревья, типы, и прочая ерунда. База данных она есть в любом случае и подключение к ней есть в любом случае и всё что надо в ней хранить в ней и хранится. Нужно предельно примитивное и быстрое.

Suntechnic ★★★★★
() автор топика

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

Corey
()

MongoDB? Хотя для твоих целей

хранить до 1-2 сотен ключей это потолок

это излишне наверное.

matrixd
()
Ответ на: комментарий от x3al

Не принципиально. Это скорее хранилище констант. Никто не пишет в него просто так. Ну вот смотри - надо вынести в настройки допустим телефоны организации и её адрес. Стандартно под это ничего не предусмотрено. Можно нагородить огород вокруг БД. Учитывая что в данном фреймоворке не принятно работать с БД напрямую и надо использовать API... Ну короче для вынимания телефона потребуется целый табор снаряжать за ним. Мне кажется это грустно.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от matrixd

Переносимость. Я не подниму Mongo или Redis на первом попавшемся копеешном шареде.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Ну вот смотри - надо вынести в настройки допустим телефоны организации и её адрес. Стандартно под это ничего не предусмотрено.

Это называется конфигом. И лучше бы чтоб он мог редактироваться руками, на всякий случай.

baverman ★★★
()
Ответ на: комментарий от baverman

Прыщавые школьники это не люди.

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

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Это скорее хранилище констант. Никто не пишет в него просто так. Ну вот смотри - надо вынести в настройки допустим телефоны организации и её адрес

1-2 сотен ключей это потолок

require_once('phone_and_address.php')

На любом шареде, никаких огородов.

x3al ★★★★★
()
Ответ на: комментарий от baverman

То что выплевывает var_export очень легко редактировать руками. Но клиент хочет в «одминке» редактировать, видишь ли. Никак ему не объяснишь, что это надо руками делать. Хотя лично я так и делаю.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от x3al

Прекрасно. Теперь нужен интерфейс для редактирования этой бороды в админке CMS. Как?

Вообще говоря в этой CMS примерно так и сделано как ты написал. И потом имеем 150 инклюдов в 500 местах.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

И потом имеем 150 инклюдов в 500 местах.

spl_autoload ? Не, не слышал..

hidden_4003
()
Ответ на: комментарий от Suntechnic

Никак ему не объяснишь, что это надо руками делать.

Опять не правильно понял. Редактируемость руками не означает невозможность править из гуя.

// Какой-то ты нервный сегодня. На работе что ли в Сб сидишь?

baverman ★★★
()
Ответ на: комментарий от Suntechnic

Не надо никаких лишних движений с парсингом. Просто читаешь-пишешь файл.

fish_ka
()
Ответ на: комментарий от baverman

У него же категория - шаред. Т.е. тебе дают фтп и ты заливаешь файлики в папочку, ни тебе крона, ни ссш, о редисе речь просто не идет.

Хотя самый копеечный впс стоит столько-же но его надо еще и админить и настроить.

hidden_4003
()
Ответ на: комментарий от hidden_4003

А где я советовал не шаред решение? Продай свисток, купи очки.

baverman ★★★
()
Ответ на: комментарий от hidden_4003

У него же категория - шаред. Т.е. тебе дают фтп и ты заливаешь файлики в папочку, ни тебе крона, ни ссш, о редисе речь просто не идет.

Хотя самый копеечный впс стоит столько-же но его надо еще и админить и настроить.

У меня где-то 50 на 50 шаредов и vps/vds - штук по 10-15 каждого. Я имел ввиду «и на шареде тоже».

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от baverman

Перечитал дважды - никакого другого вывода кроме того, что по твоему мнению редис используют прыщавые школьники, не сделал. Что же ты хотел сказать?

Suntechnic ★★★★★
() автор топика

Сериализация либо сразу код пишешь в файл. Тред не читал.

trashymichael ★★★
()

fileputcontent(json_encode($db));

urxvt ★★★★★
()
file_put_contents(json_encode...)
json_decode(file_get_contents...)

Какой Капитан морган? Какое API? Какая обвязка? Если так нравятся обвязки — иди в джаву, пиши там фабрики фабрик абстракций

thesame ★★★★
()

Berkeley DB уже вспоминали? В частности версию 1.85 — быстро, надёжно, глобоально.

beastie ★★★★★
()

Кейс примитивный - хранить до 1-2 сотен ключей это потолок

Самый быстрый способ — serialize/unserialize ( http://www.balancer.ru/g/p3304960 ) и читать всё в память. Только при записи надо не бывать лочить файл, а то на параллельной работе легко поймать его повреждение.

Более «честный» и без внешних сервисов (я понял вопрос в этом?) — использовать embedded, типа leveldb или хотя бы sqlite. Первое быстрее, второе — чаще стоит на говнохостингах.

KRoN73 ★★★★★
()
Ответ на: комментарий от Suntechnic

Вот кстати... А почему serialize/deserialize а не просто var_export?

См. ссылку на бенчмарк в предыдущем моём постинге :)

А если скорость не важна, то лично я выбираю JSON. Он читается хорошо :)

А в варианте с голым key=value, ещё красивее использовать .ini — и скорость, как у var_export/eval, и human readable полный.

KRoN73 ★★★★★
()
Последнее исправление: KRoN73 (всего исправлений: 1)

Кейс примитивный - хранить до 1-2 сотен ключей это потолок. По факту пара десятков.

разве тебе недостаточно обычного массива php?

emulek
()
Ответ на: комментарий от KRoN73

Только при записи надо не бывать лочить файл, а то на параллельной работе легко поймать его повреждение.

в данном случае даже этого не нужно, т.к. ТС говорил, что это какие-то телефоны в какой-то админке. Неужели у него на редактирование 20и телефонов выделено более одного одмина?!

emulek
()
Ответ на: комментарий от KRoN73

Мне важна полная переносимость. Как я сказал у меня сейчас более 20 проектов на совершенно разных хостингах и решение работать должно везде. За измерение производительности спасибо - большая часть работы проделана, осталось сравнить unserialize(file_get_contents('serialize.dat')) vs include($path) - потому что я делаю сейчас именно так сохраняя в файл сразу self::$__currentBase=array(); если будет не на много дльше - заюзаю его - это решает кое-какие проблемы.

Suntechnic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.