21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
1 | |
Категоризированная база знаний - аналог Wiki09.07.2018, 10:58. Показов 1247. Ответов 21
Метки нет (Все метки)
Если делать категоризированную базу знаний - аналог Wiki, возникает проблема:
- Если сохранять форматированный текст в базе, то теряется форматирование. - Если сохранять текст записей в отдельных файлах, то по ним будет медленный поиск, т.к. для поиска придётся последовательно перебирать все файлы и строки. Как же тогда лучше сделать базу знаний? Какие-то из двух указанных проблем можно обойти легко? Добавлено через 17 минут Пока есть идея сохранять текстовые символы форматирования как у wiki в базе... Добавлено через 8 минут Но если бы в базе можно было сохранить всё форматирование, это было бы лучше.
0
|
09.07.2018, 10:58 | |
Ответы с готовыми решениями:
21
База знаний База знаний База знаний по С++ База Знаний! |
09.07.2018, 20:35 | 2 |
почему?
что значит "медленный"? каковы размеры файлов и сколько мс у вас "медленно"? а при чем тут делфи? вы не написали ни какая у вас СУБД, ни размер текстов ЗЫ возьмите живую бесплатную вики и смотрите как она устроена
1
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
10.07.2018, 08:28 [ТС] | 3 |
Я пробовал сохранять текст из RichEdit в базе mdb в поле МЕМО, сохраняется только сам текст, но не свойства всех символов...
Сам принцип: в базе делается мгновенная выборка, а в файлах, чтобы что-то найти, нужно их все перебрать по очереди и построчно. Если делать это в папке из нескольких тысяч записей - файлов, то думаю, будет медленнее происходить поиск, чем в обычной базе. Да, wiki - идеальный вариант, но для локального использования пользователи - не так удобна, как могла бы быть удобна локальная программа. Ду, буду брать с неё пример. Кстати форматирование там сохраняется с помощью специальных текстовых символов в базе, потом отдельно программируется отображение форматированного текста в зависимости от имеющихся символов форматирования. Попробую реализовать пока на mdb... Как думаете, какая структура базы знаний более правильная?: 1) Дерево категорий, в каждой категории могут быть записи, в каждой записи текст. 2) Дерево страниц, они же являются и категориями, каждая страница содержит текст и другие такие же страницы.
0
|
10.07.2018, 20:29 | 5 |
как пробовали?
в базе никогда не делается "мгновенная" выборка а попробуйте программку называется everything (http://www.voidtools.com/) ключевые слова и индекс поможет по каким признакам? не зная что вы подразумеваете под базой знаний ответить невозможно вы вообще не понимаете что хотите от готового продукта, у вас не списка требований, у вас не проработан функционал и слабо с реализацией
0
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
||||||
10.07.2018, 22:37 [ТС] | 6 | |||||
Вот приблизительный пример:
- ради нескольких сотен записей ставить локальный хостинг на 2 гига и движок на десятки тысяч файлов как-то не нормально; - не каждый сможет (захочет) для базы знаний ставить и изучать локальный хостинг, учиться настраивать MediaWiki; - работает не очень быстро, каждое действие приходится ждать по пол секунды и более. Да, но в MediaWiki работает глобальный поиск по всем текстам и без ключевых слов. И локально это тоже элементарно делается в базе. Посмотрел описание и скрин, прикольная. Ещё есть методы поиска не по названиям файлов, а по тексту в них, тоже пробовал разные. Понял. В любом случае, select * from were по моим наблюдениям и предположениям должно срабатывать быстрее, чем перебор всех строк в файлах. Но на одинаковом количестве записей не сравнивал, так что утверждать не буду.
Возможно реализую вики-форматирование и его символы буду сохранять. Есть общее представление, по многим вопросам определился, а там где сомневался - переспросил. Да, я делаю не быстро, пока сделал так (что-то осталось от предыдущих проектов): Требования есть кое-какие: импорт, экспорт, древовидная структура, поиск по тексту записей, тип базы, форматирование хоть минимальное, какие-то требования будут меняться постепенно.
0
|
11.07.2018, 20:25 | 7 |
это обычный TreeView
к его узлам можно прицепить все что угодно - от текстовых файлов, до видеороликов как будете хранить данные? обычный текст с тегами как html? только стандартные теги? или еще свои собственные? структура чего? хранить то вы будете в таблицах это что значит? это значит нужно начинать не с картинки, а с продумывания объектов
0
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
17.07.2018, 10:46 [ТС] | 8 |
В принципе, все вопросы уже отпали, я определился что каким способом сделать и сделал на прошлой неделе.
Отвечу на встречные вопросы. Использовать этот компонент с базами очень проблематично. Всё-таки решил сохранять весь текст со всем форматированием как rtf в базе. Я выбрал Access, mdb, ado. Да, подумал, что нужно, посомневался как это лучше сделать и потом принял одно из имеющихся решений. Ну как бы структура категорий или структура страниц, как они связаны между собой, где дочерняя, где родительская. Решил пойти по пути наименьшего сопротивления: названия страниц связаны между собой в древовидной структуре. Был ещё второй вариант: древовидные категории, а в каждой из них может быть включено несколько страниц. Этот вариант отпал. Вот как сделал: Всем спасибо за советы!
0
|
669 / 559 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
|
|
17.07.2018, 11:27 | 9 |
Зря.
1. чем больше объем базы - тем больше торомозов. 2. ориентирована на одно подключение (один пользователь). Лучше или MySQL, или FireBird. Эти СУБД бесплатные, позволяют многое и просты в освоении.
1
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
|
|
18.07.2018, 02:03 | 10 |
Никаких проблем не вижу.
Разумеется. А иначе никак.
Если это учебная задача/проект, то сойдёт.
1
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
18.07.2018, 13:06 [ТС] | 11 |
Проблема в том, что и при удалении узла в TreeView все последующие узлы ниже перенумеровываются, а в базе при удалении записи все последующие записи не перенумеровываются.
Поэтому, при каждом удалении узла в TreeView приходится заново устанавливать соответствие все узлов, ниже удалённого записям в базе. А это не нормально, особенно, если узлов тысячи. Ну и соответственно, при добавлении новых узлов в середине дерева узлов. Добавлено через 51 минуту Я тоже так считал. Но сегодня засомневался. Сохранил в одной записи изображение (скриншот) и размер базы сразу увеличился с 2 мегабайт до 20 мегабайт. Мне это очень не понравилось. А если изображений будет сотни, тысячи... Я бы не хотел, чтобы размер базы стал слишком большим и перевалил за гигабайты. Вот теперь подумываю теперь хранить форматированный текст в файлах по папкам. При этом неформатированный текст останется в базе, для выполнения всяких sql-запросов в тексте.
0
|
18.07.2018, 21:55 | 12 |
извините, но у всех все работает и только у вас "проблематично"
никто ничего не перенумеровывает не нужно устанавливать никаких соответствий у вас есть таблица - узел (GUID) \ родитель (GUID)\ текст строите по этой таблице дерево - в свойство Data каждого узла пихаете GUID узла при удалении элемента вы достаете его GUID и удаляете в базе, при этом проверяя, не является ли он родителем и если да, то удаляете его подчиненные записи ВСЕ не надо хранить картинки и видео а если хранить, то только preview и база должна быть не MDB, а нормальная
0
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
18.07.2018, 23:00 [ТС] | 13 |
Обычно пользуются специальными компонентами, для работы дерева с базой, а не чистым TreeView, например VirtualTreeView, EhLib и пр.
Если удалить a11, то изменятся индексы и у a12, и у b1 и у c1. У них меняется и AbsoluteIndex и Selected.Index, и при доступе по tv1.Items[2].Text будут доступны уже другие узлы. Вот из-за этого сдвига, приходится перестраивать соответствие с базой. Но проще использовать специальные методы, предназначенные для строительства дерева из базы. Пока все мои программы на mdb отлично работают. Считаю ненормальной ситуацию, когда для запуска программы у пользователя нужно делать инсталлятор, который впихнёт ему firebird. Но когда придётся пойти на это.
0
|
19.07.2018, 06:14 | 14 |
ими пользуются когда функционала не хватает, но не вам об этом писать)
а зачем вы ориентируетесь на эти индексы? я вам написал что вы должны хранить ссылку на записать в свойстве Data - тогда не надо ничего перестраивать (это вообще дикая идея при удалении элемента что то перестраивать на всей базе) а для mdb не нужен офис? вам рано или поздно понадобятся SQL запросы для работы с БД, а аксесс это не очень хорошо умеет. ИМХО даже SQlite это делеат лучше
0
|
Модератор
|
|
19.07.2018, 07:55 | 15 |
Не надо ничего "впихивать", просто носить вместе с ехе-шником и файлом БД еще 2-3 библиотеки - и все... Вот, к примеру, в моей организации не используют MS Office - и что, Ваша программа для нас недоступна? Беда-печаль, которой легко избежать, перейдя на нормальную СУБД вместо Access
0
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
19.07.2018, 08:25 [ТС] | 16 |
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
И не тормозит ни капли, всё нормально работает, не вижу пока смысла переходить на что-то другое.
0
|
Модератор
|
|
19.07.2018, 08:39 | 17 |
Далеко не факт, что на машинах, на который офис не устанавливали
никогда , в ODBC-драйверах будет находится драйвер провайдера MS Jet 4.0, без которого Ваша программа просто не взлетит...Добавлено через 1 минуту Но дело-то хозяйское... Никто Вас уговаривать не собирается... Хотите Access - работайте с Access...
0
|
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
|
|
19.07.2018, 17:57 [ТС] | 19 |
Поверил ещё раз, снёс Microsoft Office, программа с mdb работает, внёс данные, вот скрин.
На работе два человека вносят записи в программе по учёту предприятий (застрахованных лиц Фонда), ажиотаж прошёл, сейчас вносится не более чем 10 записей в день, несколько человек работает с программой на просмотр. Дома программы по учёту расходов, учёту запланированных дел, по ведению дневников, база знаний. Пока тоже всё без тормозов, в учёте расходов выводится в таблице сразу 3500 записей. Придут тормоза - сделаю кэширвание или перейду на другие базы. По базе знаний: структура проста: таблица узлов и таблица записей, в узлах у каждого указано название, указан номер родительского узла и путь к узлу, в таблице записей текст записей и номер узла, к которой относится запись. Узлы в дереве - названия статей, которые могут иметь дочерние статьи. Всё читаю и вношу sql-запросами. Для связи базы с деревом использую связку от EhLib, но есть один недостаток в ней... После каждого обновления таблицы узлов все узлы становятся раскрытыми. Приходится после каждого обновления таблицы узлов циклом закрывать не нужные узлы. Может быть позже перейду на другой вид связи базы с деревом узлов, может быть VirtualTreeView когда-нибудь попробую.
0
|
Модератор
|
|
19.07.2018, 18:30 | 20 |
0
|
19.07.2018, 18:30 | |
19.07.2018, 18:30 | |
Помогаю со студенческими работами здесь
20
База знаний на Java База знаний на Prolog База знаний «Золотой ключик» База знаний болезней Prolog Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |