|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
RAD XE3+ Где лучше хранить большую текстовую базу?09.09.2023, 10:35. Показов 6360. Ответов 86
Здравствуйте!
Столкнулся с проблемой. У меня есть база в Memo1 -занимает 100 000 строк. Ищет в случае обращения поиском по данному мемо если всё хранить в нёпочемуто долго, а если рядом созраняю с прогой текстовый файл и ищу по нему то тоже долго, есть ли какойто быстрый вариант для работы с бальшими базами данных именно в Delphi? Спасибо за ответ(ы). С уважением, Денис.
0
|
|
| 09.09.2023, 10:35 | |
|
Ответы с готовыми решениями:
86
Где лучше хранить данные
Где лучше всего хранить базу данных больших размеров ? |
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 18.09.2023, 17:37 | |
|
Json в первую очередь это промежуточный формат обмена данными между СУБД, а это приводит к очевидному выводу, что для полноценного использования этих данных вам нужна СУБД, тем более это необходимо, когда речь идет о быстром получении информации по разным критериям и выводе результата на экран. Никакой поиск по тексту, даже с использование регулярных выражений, не даст вам выборку нужной информации. О предоставлении выборки в заданном порядке, да еще с учетом дополнительных поисковых критериев вообще речи не идет. Вывод очевиден, нужна СУБД, осталось определится, какая именно вам лучше подойдет. Я бы остановил свой выбор на SqLite, т.к. для ее работы вам вообще ничего дополнительно устанавливать не потребуется, да и объем данных в 100 тыс строк для этой БД - мелочь.
3
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
||
| 18.09.2023, 18:13 [ТС] | ||
|
Благословенного всем дня!
-------------------------------------------- Если Вас, и любого кто готов наполнять Наш лучший форум Рунета хорошими знаниями, не затруднит подискутировать в рамках данной темы, подскажите пожалуйста, последовательность действий, создания базы данных SQL (теперь это просьба помощи), для добавления и максимально быстрого поиска (в цикле я всё подключу сам, но добавлению компонентов и работе с ними хотелось бы научиться). Итак: 1. Есть File.txt в котором находятся 100 000 строк. 2. Надо найти строку в которой есть слово "Москва". 3. Какие компоненты надо добавить для размещения базы? 3.1 Где разместить базу для взаимодействия с ней? 4. Как должен правильно быть добавлен SQL запрос в кнопку? Если Вас не затруднит помогите мне и одновременно помогая мне, давайте создадим короткую, но последовательную методичку/туториал для будущих поколений, как мудро и грамотно это не раз делал легендарный госп-н Крапоткин. С уважением, Денис.
0
|
||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
|
| 18.09.2023, 19:25 | |
|
В базе есть индексация и механизмы разделения доступа и контроль целостности.
По работе с БД есть куча книг. Как, впрочем, и нюансов, которых в книгах не будет. А вообще я так и не понял, что это за данные, как они выбираются, и как записываются. Лет 10 назад у нас поставили на заводе новые вулканизаторы двух типов. Ну а поскольку купить оборудование на сотни миллионов, но не заказать копеечный автоматический сбор с них данных, это по нашему, то съем данных для технологов флешкой в виде txt-файлов был. Там на одной модели, период записи был 1 секунда, как вы будете строить график работы за 1 8-часовую смену в том же Excel при таких объемах данных, я ХЗ. Никак. И запаритесь выбирать, и Excel просто сдохнет такой график из сотен тысяч точек рисовать. Я сделал архивацию в БД, тем более серверная база всем доступна. А потом тетки додумались, что зачем все вносить, когда можно текстовые файлы хранить, они же графики смотрят только если проблемы были, и просто вносить перестали. Только если надо, занесут. Я в итоге плюнул, сделал им просто открытие этих файлов без заноса в БД. И их это устраивает, просто складировать десятки гигабайт текстовых файлов, открывая только нужные. По, идее, может сдохнуть диск, на котором это дело лежит, это как минимум, т. е. требование надежности не выполняется. Но им пофиг, да и эту проблему обходили еще во времена бумажных самописцев. Так что я ХЗ, возможно, в вашем случае можно обойтись текстовым файлом, а, возможно, там есть смысл сделать нормальную БД с разбиением по науке и справочными таблицами. Для умеющего работать с БД это вообще всегда проще, т. к. работа стандартная.
0
|
|
|
|
|
| 18.09.2023, 19:56 | |
|
если я все верно понял, на входе - json файл - массив из 100500 одинаковых объектов
задача 1. загрузить файл в JSON - парсер 2. приготовить БД и в ней таблицу ровно такой же структуры и в цикле загрузить одно в другое возможно нам нужно будет еще доп поле - типа номер загруженного файла, или его имя, или еще что-то, чтобы проводить загрузку нескольких файлов первый пункт вам должен вроде уже быть понятен второй - не так прост, чтоб его в двух абзацах разъяснить нужно как минимум понимать как работают базы данных можно использовать SQLite, как самую простую и с помощью компонентов FireDac сделать все что нужно вот например видео как JSON разбирают и суют в виртуальную таблицу в памяти. тут JSON правда с сервера получают, но это в нашем случае лишнее. https://www.youtube.com/watch?v=zDts1DgVbnU а вот - как работают вообще с FireDac https://www.youtube.com/watch?v=iW644fKdFic (возможно на российском канале есть русскоязычная версия) вот собсно и вариант - соединить эти два процесса - загрузить не в виртуальную таблицу - а в настоящую (но для этого надо ее создать) например с помощью https://sqlitebrowser.org/
1
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
|
| 18.09.2023, 20:10 | |
|
Насчет пакетной вставки через FireDAC, я какое-то время назад с удивлением нарвался на баг с TFDQuery.SQL, в отличие от обычного TStringList время добавления новых строчек в SQL было не линейным, а почти идеально квадратичным. В какой версии это появилось, не знаю, но в 11.2 есть. Пришлось обходить пачками штук по 50.
Если надо дописывать с опред места в файле, который кем-то постоянно дописывается, то просто запомнить макс. Id в базе и только от него брать.
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
||
| 19.09.2023, 00:35 | ||
|
Создать базу SqLite и импортировать в нее данные можно средствами Delphi, но настоятельно рекомендую скачать с оффсайта архив с набором свежих утилит. Из архива вам потребуется sqlite3.exe. Эта консольная программа умеет очень много полезного, о чем почитайте тут. Ну и наконец создать базу в этой утилите можно так: 1. Запустить sqlite3.exe 2. Выполнить команду .open c:\\test.db3 Создать таблицу в базе и добавить в нее запись так: 3. Выполнить команду create table TestTable (TestField varchar(50)); 4. Выполнить команду insert into table TestTable (TestField) values('test value'); Посмотреть содержимое таблицы так: 5. Выполнить команду select * from TestTable;
1
|
||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
|
| 19.09.2023, 08:10 | |
|
0
|
|
|
|
||||||
| 19.09.2023, 09:41 | ||||||
|
это не баг.
это поведение надо каждый раз же все это великолепие пытаться перерисовать или хотя бы понять, что из этого на экране, что - нет поэтому
0
|
||||||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
||||||
| 19.09.2023, 10:01 | ||||||
|
Вру. Не подцеплен. За год уже подзабыл детали.
1
|
||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|||||||
| 19.09.2023, 14:52 [ТС] | |||||||
|
Ребята Все здравствуйте и отличного настроения насколько это возможно!
1. Уверен что Вам сложно чтото советовать как минимум непонимая как выглядит сам файл который я называю базой. 82894 города TIR.rar Поэтому посмотрите пожалуйста на этот список выше и скажите пожалуйста, - может быть прежде чем создавать базу где либо стоит массово удалить лишние теги, символы и прочую повторяющуюся мелочь? - если оставить всё как есть то на первый взгляд видно что это JSON однако начальные: content [ и в конце ] были удалены от чего структура нескольк изменилась, попытаться добавить первоначальный вид или можно оставить всё как есть? 2. Как верно подмечено, госп-м Крапоткиным, задача не простая для новичка, поэтому давайте начнём с создания самой базы, а после уже поговорим о том как проводить по ней поиск. 3.
...однако проводя манипуляции с созданием базы по Вашей инструкции получил сообщение:
Вот есть у меня предположим пустая прога и єтот файл со списком из 82894 строк. Какие дальнейшие действия?
0
|
|||||||
|
|
|||
| 19.09.2023, 14:55 | |||
|
утверждать не буду, но подозреваю, тут query не делает примерно ничего, кроме передачи текста скрипта на сервер
в целом, я даже не знал, что в Query можно вставить более одного SQL выражения)) при работе с сервером Firebird это например, точно не работает но там есть безымянные блоки в них есть явное ограничение на количество выражений в блоке - 256 поэтому тоже делаю апдейты, разбивая на части. но само исполнение на сервере - очень быстрое Добавлено через 1 минуту Добавлено через 1 минуту
1
|
|||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
||
| 19.09.2023, 16:05 | ||
|
OK, это просто список городов, у каждого есть Id, страна, название, широта и долгота.
Если бы мне надо было сделать БД на основании этого файла, то я бы сразу спросил следующее: 1) Как присвоены Id? Они из какого-то справочника и вводятся пользователем вручную, или это автоинкрементное поле и вообще данная БД не должна ни с чем связываться? 2) Что такое Areaid? Я вижу, что это был какой-то старый украинский справочник, но для др. стран там указано только число? Откуда оно взялось? Для того, чтобы удобно было редактировать, логично выделить таблицы-справочники по стране, и, видимо, справочник регионов изначально был. После ответов на эти вопросы можно создавать базу с таблицами.
Т. е. для MS SQL Server это как в его родном Managment Studio просто через ; набрать скрипты, и они все выполнятся. Query передачу скрипта не начнет, пока не будет ExecSQL, но операция банального добавления строк в TSrings не может иметь квадратичную зависимость. Я даже пробовал в TStringList собрать и сделать Assign, собирается мгновенно, ассаигнится долго.
0
|
||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
| 19.09.2023, 16:43 [ТС] | |
|
Госп-н Beltar,
Каждый ID в начале = соответствует городу. Ареа = ID области ..надо только добавить эту базу и иметь возможность найти номер нужной мне строки, например ту в которой есть слово Москва, неважно даже если есть несколько строк где есть слово Москва, просто чтобы нашло. У меня сейчас всё работает как я выше писал разделив эту базу на три мемо и успешно всё находит и обрабатываю дальше как мне нужно. Всё дело в скорости, если добавление в базу данных SQL увеличит скорость поиска нуджной строки во время работы цикла, то мне бы очень хотелось добавить такую базу в прогу. С головой ушел в изучение думаю дня мне хватит. Господин Крапоткин Вы такую инфу даёте слюнки текут, спасибо Вам большое! Ребята всем разумеется большое спасибо! Пройду первый этап отпишусь, может быть дальше пойдёт всё "как п маслу"... С уважением, Денис.
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 19.09.2023, 18:16 | |
|
Прикрепленный файл имеет нарушения структуры Json. Вот что у вас имеется:
{"id":49,"name":"Луганск","countrySign": "UA","areaId":Луганская"lat":48.574041," lon":39.307815} а вот так это должно быть: {"id":49,"name":"Луганск","countrySign": "UA","areaId":"Луганская","lat":48.57404 1,"lon":39.307815} и такое нарушение в каждой строке. Откуда вы получили этот файл?
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
| 19.09.2023, 18:21 [ТС] | |
|
Да я говорил выше что есть нарушение.. это вобщем то был нормальный JSON но в результате работы с ним он стал таким.
Там ге можн овзять эти строки их можно брать только по сто, я сделал прожку которой выбрал по сто штучек все 80 000 но в результате сложения в мемо каждых ста строк формат побился ...
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 19.09.2023, 18:27 | |
|
Это как же надо было изуродовать файл - пипец просто. Часть строк не разделены запятыми, где ни попадя вставлены квадратные скобки. В таком виде его ни один json-парсер не примет.
0
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
|
| 19.09.2023, 18:58 | |
|
Работать надо с копией.
Я понимаю, что Id - это код города, и первичный ключ таблицы, вопрос, как этот Id назначается, автоматически движком БД по счетчику (при вставке в такое поле надо явно разрешать вставку в него), или его человек вводит. А может и не вводит, но фиксированный набор данных - это маловероятно. С областями, куда они все делись, ну и тоже вопрос, кто этот код назначил. Самая очевидная структура таблиц может быть такой, связи тоже сделаны в схеме данных. Правда, Access в силу врожденного идиотизма не может даже слизать интерфейс управления MS SQL Server и сразу показывать отдельно целые и вещественные типы в структуре. Выбирай числовой, а потом уже длинное целое, или вещественное, как и допустимость пустого значения.
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|
| 19.09.2023, 19:50 | |
|
0
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
|
|
| 19.09.2023, 19:52 | |
|
Пальчики в розетку тоже не лезут, но ведь всегда можно гвоздики взять.
0
|
|
| 19.09.2023, 19:52 | |
|
Как и где хранить текстовую информацию для программы тестирования? Как лучше хранить большую корзину (больше 140-170 товаров)? Как лучше сделать большую базу данных? Где хранить базу данных? Где лучше хранить информацию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|