Есть задача: получить управляемое как БД хранилище данных, которое должно содержать достаточно много (сотни) достаточно крупных (десятки тысяч знаков) кусков текста. Скорость работы не особенно важна. Хочется иметь:
1) Возможность управлять (выборка/создание/удаление/редактирование) как обычной базой — по возможности при помощи SQL
2) Интерфейс управления по типу MS Access/OOo Base или (пожалуй, лучше) JDBC-драйвер к этой базе
3) Хранение данных в виде файла или совокупности файлов, желательно текстовых. Скажем, таблица — каталог в файловой системе, запись — файл в этом каталоге. Идея в том, чтобы при необходимости можно было редактировать и, главное, просматривать записи без помощи СУБД, напрямую, и при соблюдении нужного (и в то же время удобного для человека) формата такая отредактированная запись нормально воспринималась СУБД и ею можно было манипулировать так же, как любой другой.
Последнее условие, в котором, собственно, вся проблема и состоит, — для, во-первых, простой переносимости базы, во-вторых, редактирования данных сторонними средствами, не умеющими работать с БД, зато вполне подходящими для плейнтекста, в-третьих, не завязанного на базу версионирования: хорошо бы использовать с этой целью обычную систему контроля версий, а при этом, понятно, нужна прозрачность на уровне данных, то есть — самое очевидное — как раз текстовые файлы.
Подозреваю, что я не первый, кто сталкивается с подобной задачей, и изобретать велосипед не хочется, но гуглением ничего подходящего найти не сумел. Не знает ли кто о такой БД?
А какие требования к бд собственно? Т.е. какие запросы ты собираешься делать например? Если все что нужно, это получить и положить файл, то самое очевидное решение — папка с файлами. Зачем тогда база?
Здравствуйте, glornay, Вы писали:
G>Подозреваю, что я не первый, кто сталкивается с подобной задачей, и изобретать велосипед не хочется, но гуглением ничего подходящего найти не сумел. Не знает ли кто о такой БД?
Возможно первый Слишком много противоречивых требований. Хотите БД — используйте СУБД и JDBC-драйвер. Хотите файлики — используйте файлики, а SQL к ним делайте уже своими силами, если он так нужен.
Что подразумевается под переносимостью не ясно: ну да, для большинства баз нужно не только скопировать пару файлов, но и выполнить 2-3 команды, но это вроде обычно не проблема.
Для редактирования сторонними средствами данные из БД выгружают (нужную часть) и загружают (правки) — хранить БД в текстовом виде для этого не требуется.
Ну и желание использовать "обычную" (для исходных текстов, я так понимаю) систему контроля версий это странно.
Но есть подозрение, что требования вы сформулировали не самым лучшим образом, поэтому лучше напишите конечную цель.
Хотелось бы связи между таблицами по внешним ключам, возможность делать выборки с подзапросами... в общем, просто папка с файлами — вариант возможный, но не лучший.
Здравствуйте, 11molniev, Вы писали:
1>Но есть подозрение, что требования вы сформулировали не самым лучшим образом, поэтому лучше напишите конечную цель.
Речь не об исходниках; БД предполагается использовать для хранения многолинейного и, возможно, разветвляющегося сюжета, описываемого словами. То есть будет два вида работ: выстраивание собственно сюжета на уровне логики (это удобно делать через СУБД: связывать события причинно-следственными связями, привязывать к ним участников, локации и так далее) и создание достаточно объёмных текстовых описаний (это уже хотелось бы делать в обычных плейнтекстовых редакторах со всеми их возможностями). Причём, очень возможно, заниматься этим будут люди, довольно смутно представляющие себе, что такое БД и как иметь с ними дело.
Здравствуйте, glornay, Вы писали:
G>Хотелось бы связи между таблицами по внешним ключам, возможность делать выборки с подзапросами... в общем, просто папка с файлами — вариант возможный, но не лучший.
А как предполагается хранить онформацию о связях? В самих документах, или предполагается какая-то мета-информация (т.е. связи хранятся в неких данных связанных с документом-описанием)
Можно допустим просьо взять какую-нибудь готовую систему управления документами. Тот же шарепоинт. Не вариант?
Здравствуйте, glornay, Вы писали:
G>Здравствуйте.
G>Есть задача: получить управляемое как БД хранилище данных, которое должно содержать достаточно много (сотни) достаточно крупных (десятки тысяч знаков) кусков текста. Скорость работы не особенно важна. Хочется иметь: G>1) ... G>2) ... G>3) ...
G>Подозреваю, что я не первый, кто сталкивается с подобной задачей, и изобретать велосипед не хочется, но гуглением ничего подходящего найти не сумел. Не знает ли кто о такой БД?
В Microsoft SQL Server, начиная с версии 2012, реализована технология FileTable, которая отчасти позволяет решить вашу задачу. Если кратко, то в БД создается специальная таблица FileTable с заранее предопределенной схемой и соответствующий ей шаренный каталог. Внутренние драйвера обеспечивают синхронизацию содержимого папки и таблицы. Т.е. каждый элемент в каталоге файл/папка представляет собой запись в таблице с учетом иерархий. Возможны два варианта работы – нетранзакционный, когда пользователи напрямую работают с шарой, например через Windows Explorer/FAR, фактически через WinAPI. Вся работа ведется прозрачно, любая операция с каталогом (файлом) приводит к синхронным операциям на таблице. Возможен и другой вариант, транзакционный через таблицу с использованием T-SQL, когда например удаление записи, приводит к удалению файла на шаренном ресурсе. Т.к. FileTable создается в специальной файловой группе, то вы получаете все преимущества по бэкапу и восстановлению данных.
Что касается версионности, то здесь не совсем понял, что под этим подразумевается. По всей видимости, это требование придется реализовывать самостоятельно.
Здравствуйте, glornay, Вы писали:
G>Здравствуйте.
G>Есть задача: получить управляемое как БД хранилище данных... G>1) Возможность управлять (выборка/создание/удаление/редактирование) как обычной базой — по возможности при помощи SQL G>2) Интерфейс управления по типу MS Access/OOo Base или (пожалуй, лучше) JDBC-драйвер к этой базе G>3) Хранение данных в виде файла или совокупности файлов, желательно текстовых. ...
Есть личный опыт:
— База данных — файл Excel, таблица — лист Excel , пользователь легко откроет и внесет нужные изменения
— Интерфейс форм выборки/редактирования рисуется тоже на ячейках Excel
— Есть готовые VBA скрипты (типа фреймворк) для обработки событий форм выборки/редактирования данных
— Для работы с базой данных используется SQL через Microsoft.Jet.OLEDB (поддерживает SELECT, INSERT, UPDATE, кроме DELETE для базы в Excel)
Исходники с примером лежат в открытом доступе на sourceforge.net. Подробности в личке...