Comments 33
А ещё есть такая штука -- https://www.nushell.sh/ . Но она не из коробки, конечно.
Nu pipelines use structured data so you can safely select, filter, and sort the same way every time. Stop parsing strings and start solving problems.
Т.е. мы уходим от парадигмы, что через пайп идет обычный текст? И это значит, что grep использовать нельзя и все существующие скрипты с nushell не совместимы?
Nu pipelines use structured data so you can safely select, filter, and sort the same way every time. Stop parsing strings and start solving problems.
По сути, первую массовую реализацию этого подхода сделали Microsoft в своем PowerShell. И на самом деле, это правильный и логичный подход, который должен прийти на смену парсинга строк. Пора уже отходить от низкоуровневой шелловской парадигмы "всё - строка" к более структурированной парадигме "всё - объект".
Вот согласен, парсить надо только исходный файл, и дальше работатьс объектами, а не работа со строками на всех этапах.
И это круто, что PowerShell сделали кроссплатформенным, после того когда выпустили кроссплатформенный .NET. И можно использовать как доп инструмент, и не зависеть от используемого shell.
А еще элегантнее делать это через IFS и read, после чего работать с массивом.
Это уменьшает расходы на запуск внешних команд и позволяет создавать различные внутренние структуры данных.
Если же делать именно базу данных, то проще воспользоваться консольным клиентом к sql базе, которых есть под все, включая sqlite, который умеет возвращать результат в csv
И делаешь что-то вроде
mybase="Buy milk:2024-10-21:2:open:Bobby:Jack:
Call bank:2014-10-20:1:closed:Bobby Jack:"
IFS=":" read -a myarray<<< "$mybase"
echo ${myarray[5]}
Либо можно грепать и считывать построчно
Не хватает тега "Ненормальное программирование"
Осталось настроить индексы, журналирование и репликацию ;)
Транзакции
Знаете, есть такая штука, как Hive. Там нет индексов, нет транзакций, репликацию обеспечивает Hadoop HDFS. При этом в качестве хранилища данных поддерживается любой разумный формат файлов, какой можно преобразовать в колонки таблицы. Включая и CSV, само собой. Единственное ограничение - что формат этот один на таблицу/партицию. И все это вполне себе работает с терабайтами.
Конечно, правильнее было бы сказать, что ACID там уже появился, но в тоже время, много-много лет многие пользователи (включая меня) работали с этим как с промышленной СУБД, при некоторых ограничениях, само собой.
Ну т.е. я к чему - все эти свойства, они в общем случае не обязательны.
формально, набор файлов с данными не является "базой данных", так как по определению для любой элементарной БД нужна "схема" в соответствии с которой эти самые данные будут храниться. без этой самой "схемы" формально данные не являются структурированными в контексте связанного хранения, хоть и могут быть подчинены какой-то структуре внутри себя.
так что то, что тут описано это просто работа с неструктурированными текстовыми данными для получения какого-либо результата.
и возникает вопрос - зачем автор хотел натянуть сову на глобус?
mem/троллейбус-буханка.webp
чёта я не понял зачем. Чем какой-нибудь SQLite не устраивает? Чего достичь то пытаемся?
Это просто пост про мотивам "база данных.xlsx".
SQLite требует самой библиотеки/программ sqlite. А его может и не быть. Вы можете не иметь возможности устанавливать бинарные программы на компьютере, например, если у вас есть только user shell на машине и /home смонтирован noexec.
У вас нет допуска к запуску/установке программ на комп, но вам обязательно нужна на этом компе самопальная база данных... =))
Базы такого уровня сложности проще вести в бумажном блокноте.
Боже, но зачем? Sqlite весит немного, машстабируем, имеет стандартынй синтаксис команд и работает одинаково на любых системах
echo "Take out the trash:$(date -I):3:open" > tasks
Вот эквивалентный код на SQL:
INSERT INTO tasks VALUES('Take out the trash', CURDATE(), '3', 'open')
Вообще-то эквивалентным кодом на SQL будет:
DELETE FROM tasks;
INSERT INTO tasks VALUES('Take out the trash', CURDATE(), '3', 'open')
Шутка про cat ...grep и grep уже была?
Супер, конечно, только это нифига не база данных.
< Картинка троллейбус_из_хлеба.жпг >
Запросто собираем базу данных при помощи команд Linux