Автоматизация загрузки больших массивов данных предметной области в промышленную бд
Скачать 0.74 Mb.
|
МИНОБРНАУКИ РОССИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» (НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ, НГУ) ____________________________________________________________________________________________________________________ Кафедра общей информатики ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА БАКАЛАВРА Ковешников Михаил Геннадьевич Автоматизация загрузки больших массивов данных предметной области в промышленную БД Направление подготовки 230100.62 ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА Руководитель Автор Ковалёв С.П. Ковешников М.Г. в.н.с. КТИ ВТ СО РАН, к. ф.-м. н. студент ФИТ, гр. 9205 ………………………….. ..……………….. (подпись, дата) (подпись, дата) Новосибирск, 2013г. МИНОБРНАУКИ РОССИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» (НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ, НГУ) ____________________________________________________________________________________________________________________ Кафедра общей информатики УТВЕРЖДАЮ Зав. кафедрой………………… (фамилия, И., О.) …………………. (подпись, дата) ЗАДАНИЕ НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ БАКАЛАВРА Студенту (ке) Ковешникову Михаилу Геннадьевичу Направление подготовки 230100.62 ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Тема: Автоматизация загрузки больших массивов данных предметной области в промышленную БД Исходные данные (или цель работы): автоматизировать существующий процесс загрузки данных в базу данных, который использует процедуры PL/SQL и таблицы Excel Структурные части работы: работа включает в себя рассмотрение процесса загрузки данных в базу данных, обзор существующих методов загрузки данных и форматов хранения данных и их сравнение, определение частных задач загрузки данных, выявление требований к необходимому средству автоматизации, обзор существующих средств, разработку нового средства для автоматизации загрузки данных. 2 Оглавление Введение 5 1. Процесс загрузки данных 7 1.1 Сбор данных 7 1.2 Преобразование данных 7 1.2.1 Средства для преобразования данных 8 1.3 Загрузка данных 10 2. Форматы хранения данных 13 2.1 XML 13 2.2 CSV 14 2.3 XLS 15 2.4 Сравнение форматов 15 3. Подходы к загрузке данных 17 3.1 SQL-запросы 17 3.2 Загрузка данных при помощи утилиты Import для СУБД Oracle 21 3.3 Использование SQL*Loader 24 3.4 Использование Excel + PL/SQL 26 3.5 Сравнение методов загрузки данных 28 4. Виды загрузки 30 4.1 Частичная загрузка 30 4.2 Инкрементная загрузка 30 4.3 Корректирующая загрузка 32 4.4 Трассируемая загрузка 33 5. Выгрузка данных 35 6. Возможности улучшения метода загрузки с использованием Excel + PL/SQL 36 6.1 Средство для проверки файлов 36 6.2 Упрощение ввода и модификации данных 36 6.3 Использование плоских файлов для хранения данных 37 6.4 Нагрузочные показатели 37 7. Предлагаемый вариант решения 40 8. Редактор и спецификация файлов 43 8.1 Редактор 43 8.2 Спецификация файлов 45 8.3 Пример применения редактора для загрузки данных 46 8.4 Компетенции необходимые для загрузки данных 48 Заключение 50 Используемые обозначения 51 Литература 52 Приложение А. Пример конфигурационного файла SQL*Loader загружающего данные в две таблицы 53 3 Введение Энергетика является одной из самых важных отраслей в жизни, как отдельного человека, так и страны в целом. В этой отрасли активно проводятся исследования и разработки для повышения энергоэффективности и энергосбережения, предпринимаются попытки освоить новые источники энергии. Однако имеются и другие не менее важные проблемы. Согласно [1] в настоящее время объёмы данных, которые обрабатывают различные автоматизированные системы, растут. Так и в области энергетики необходимо контролировать большое количество объектов и ресурсов, получать результаты измерений со счётчиков. Чаще всего такая задача не под силу человеку напрямую, и поэтому возникает необходимость в автоматизированных средствах сбора данных. Чтобы предоставлять пользователю системы собранную информацию её необходимо где-то хранить. Таким образом, в данной предметной области существует необходимость хранить большие объемы данных, как, например, НСИ, реестры оборудования, результаты оперативных измерений. Эти данные хранятся либо в файлах для представления табличной информации, либо в базах данных. Также возникает необходимость иметь первичное наполнение базы данных сразу после развёртывания системы или для тестирования системы. В первичное наполнение включается нормативно-справочная информация (НСИ) и некоторые заранее известные объекты, ресурсы или точки измерения. Эта информация требует редкой актуализации или вовсе не требует её. Под НСИ понимаются справочники, словари, классификаторы, иерархии ресурсов. Чтобы загрузить описанную выше информацию в базу данных необходимо приложить усилия, чтобы избежать таких проблем, как дублирование информации, нарушение целостности. Также иногда возникает необходимость актуализировать данные, хранящиеся в базе. В результате, чтобы минимизировать риск ошибок, процесс загрузки необходимо автоматизировать. Эта задача усложняется тем, что загрузка больших объёмов данных сопряжена со значительными тратами времени и о том, что данные содержат ошибку, можно узнать только через значительное время после начала загрузки, и поэтому автоматизация этого процесса выгодна. Данные, которые могут ссылаться на другие значения, попадают под одно из определений большого массива данных. Согласно [2] большие данные - это такие данные, размер которых вызывает проблемы. В данном случае, проблемой является то, что операторам становится трудно управлять загрузкой данных в виду многих перекрестных ссылок. 4 Таким образом, можно сформулировать цель работы: автоматизировать загрузку данных в базу данных частично или полностью. Чтобы решить эту задачу необходимо рассмотреть способы загрузки, выявить среди них наиболее удобный для автоматизации, затем рассмотреть существующие решения, проанализировать их, выбрать подходящее или разработать новое. Также полезно рассмотреть форматы для хранения данных и более частные задачи, возникающие при загрузке данных - это дает больший объем информации для выявления требований к необходимому проектному решению. В ходе работы были рассмотрены различные форматы для хранения данных, способы загрузки в реляционную базу данных, проведено их сравнение. Был подобран метод загрузки, который достаточно гибок для автоматизации и удобен для использования. На основе этого метода был разработан редактор, автоматизирующий загрузку данных, осуществляющий проверку целостности до проведения загрузки, и снижающий зависимость от формата хранения данных. Результаты работы были доложены на 51-ой Международной научной студенческой конференции «Студент и научно-технический прогресс»[3]. 5 1. Процесс загрузки данных Чтобы рассмотреть способы загрузки данных, необходимо разобрать процесс перехода информации из некоторого источника в базу данных. 1.1 Сбор данных На первом этапе оператор получает данные из источника. Сбор информации является очень важным этапом в процессе наполнения базы данных, так как, ошибки, допущенные на этом этапе, почти невозможно исправить. Поэтому чаще всего сбор точной информации, такой как показания счётчиков и информации о состоянии системы происходит автоматически. Однако не все источники данных могут быть поставлены на автоматический сбор, либо это сопряжено с большими трудозатратами. Для них осуществляется ручной сбор. Такими источниками информации являются, например, карта города, сеть Интернет. Наиболее часто использующимися источниками информации являются файлы, показания приборов, БД, которые могут использоваться для миграции данных в другую БД. 1.2 Преобразование данных Преобразование данных может состоять из нескольких процедур, изменяющих формат данных. Формат устанавливается в спецификации, в которой описываются допустимые символы и некоторые ограничения – правила, которыми следует руководствоваться для того, чтобы при загрузке не возникло как синтаксических, так и семантических проблем. Кроме изменения формата системой может предполагаться кодирование загружаемых сущностей, эти коды могут, как получатся из внешних систем и справочников, так и генерироваться. Коды могут быть как порядковыми, когда каждой сущности присваивается целое число, полученное в результате инкремента предыдущего кода, так и последовательными. В последнем случае коды состоят из нескольких целых чисел, разделённых чаще всего точкой и отражающих вышестоящую иерархическую структуру. Кодирование в некоторых случаях предполагает верификацию в виде контрольных сумм. Контрольные числа используются в случае, если код состоит из нескольких цифр. Несоответствие вычисленной суммы и контрольного числа сигнализирует о возможной ошибке. Кроме кодирования, чтобы привести данные в необходимый формат, некоторые значения могут конструироваться из других, например, наименование сущности может конкатенироваться из диспетчерского имени и типа объекта. Правила, налагаемые на данные при загрузке, могут быть разнообразные, от указания числа символов, которое должно быть в значении, до указания справочника, в котором это значение должно быть. 6 Получив данные из источника, оператор преобразует, если это необходимо, их в приемлемую форму, при этом могут использоваться автоматические средства для приведения к корректному формату. Преобразование заключается в приведении в установленный формат для данного типа данных. Кроме этого в процессе преобразования можно получить метаданные для дальнейшей обработки или для более аккуратного сбора информации, осуществляемого на первом этапе, или для более удобной загрузки данных. Таким образом, в результате преобразования должны получиться данные, которые недвусмысленны, полны, правильны и согласованы между собой. Согласно [4] эти термины можно объяснить следующим образом: данные являются правильными, если значения и описания отражают связанный с ними объект безошибочно и точно. Недвусмысленность данных подразумевает то, что если информацию можно растолковать несколькими способами, то в результате её обработки необходимо добавить некоторый отличительный признак, чтобы разрешить неоднозначность. Данные находятся в согласованном состоянии, если они удовлетворяют единой схеме обозначений, формату. Данные отвечают требованию полноты, если, во-первых, все значения данных определены для каждого объекта, возможно, за исключением информации, верное значение которой неизвестно на данный момент, а, во-вторых, общее число записей в данных совпадает с необходимым количеством и ни одна запись не потеряна. 1.2.1 Средства для преобразования данных Для такой задачи, как поиск и исправление орфографических ошибок, существует несколько подходов. Эти подходы схожи по функциональности, а различия между ними состоят в том, где происходит обработка запроса и где расположены данные-словари с корректными словами и их формами. Первый подход заключается в использовании сторонних библиотек для проверки орфографии, таких как Jortho, Jaspell, Jazzy, Hunspell и других. Такие библиотеки используют файлы особого формата – словари. Такой файл обычно состоит из слов, разделенных символом перевода строки. Далее библиотека имеет некоторую структуру данных, которая позволяет искать по словарю совпадения и таким образом проверять правильность введенного слова. Также во многих из них имеется возможность получить список наиболее близких слов к слову, которое не было найдено в словаре. Как логика, так и словари, по которым ведется поиск, среди таких видов решений находятся на стороне клиента, встроенные в приложение. Второй подход заключается в использовании веб-сервисов Яндекс.Спеллер, google- spelling-api, также имеются сервисы у Bing, Yahoo. Популярные поисковые системы 7 реализуют подсказки при введении части слова или исправления запроса пользователя на более вероятный вариант. Таким образом, они имеют некоторые алгоритмы, которые позволяют это делать и открывают их для разработчиков в виде сервисов. Для их использования необходимо послать запрос к серверу, с которого доступен сервис. Часть сервисов требуют предварительной регистрации и включения в запрос идентификатора разработчика или приложения и ограничивают использование своих сервисов, а некоторые позволяют обращаться к ним анонимно. При использовании такого рода услуг пользователю не надо заботиться об актуальности словаря, по которому ведется поиск, однако с другой стороны у него нет возможности добавить новое слово. Название Поддержка языка программир ования Поддерживаемые языки словарей Способ взаимодействия Комментарий JOrtho Java Словари из Wikitionary (В том числе русский). Использование локальных словарей Возможность генерировать и обновлять словари. JaSpell Java Английский; Португальский. Использование локальных словарей Для поиска используются тернарные деревья. Jazzy Java Английский. Использование локальных словарей Hunspell С++, Java и многие другие Большое число различных словарей (наличие русского словаря). Использование локальных словарей Существуют портированные версии для многих языков программирова ния, включая Java (через JNA,JNI). google- spelling-api Java Языки, поддерживаемые сервисом Google Запрос к сервису через сеть Интернет Данный сервис больше не поддерживается Яндекс.Спел лер JavaScript, любой Английски; Русский; Украинский. Запрос к сервису через Есть возможность 8 язык, с помощью которого можно отправить HTTP запрос интернет проверять фразу на дублирование слов, ошибки капитализации слов. Таблица 1. Сравнение библиотек для проверки орфографии В таблице 1 приведены некоторые средства, которые умеют исправлять ошибки в текстах, и их характеристики. Для использования в целях исправления орфографических ошибок наиболее подходит библиотека JOrtho, так как она написана на Java, то соответственно проста в подключении в Java .приложениях. Библиотека JOrtho поддерживает многие языки, включая русский, который используется в собираемых данных на территории России. К тому же, эта библиотека не требует подключения к сети Интернет, что облегчает её использование. Задачи, связанные с форматированием данных по необходимой маске, могут решаться стандартными средствами Java для форматирования строк. Устранение дубликатов реализуется при помощи структуры данных – множества. Более сложные и специфические преобразования необходимо проделывать при помощи кода, например, по коду ссылки на запись справочника определить наименование этой записи. 1.3 Загрузка данных Завершающим этапом является загрузка обработанных данных в файл или базу данных. Загрузка данных может происходить, как в пустую базу данных, составляя первичное наполнение, так и в базу данных с исходным наполнением для её обновления. Обновление может происходить при изменении информации в источнике данных с разной частотой по необходимости. Обновление данных является более трудной задачей, чем наполнение первичными данными, так как могут возникнуть различные конфликты между данными, наличие дубликатов или отсутствие ключевой информации. Изменение наполнения и схемы может повлечь серьезные проблемы, как например, случайное удаление существенных данных или таблиц. Однако СУБД в большинстве случаев предоставляет механизмы, которые позволяют не допускать случайных ошибок. Тем не менее, загрузка должна быть автоматизированной и желательно должны существовать механизмы восстановления данных в случае сбоев. При загрузке используются механизмы, которые предоставляет СУБД. Чаще всего они оптимизированы для работы с конкретной СУБД и имеют разные варианты использования в зависимости от нужд пользователя и разную скорость выполнения. 9 Загрузка огромного массива данных в БД является узким местом во всём процессе перемещения данных по сравнению с остальными этапами. Поэтому важно учитывать производительность процесса. Так, например, во время загрузки данных возникают накладные расходы на проверку целостности содержимого, запуск триггеров. Чтобы повысить производительность загрузки, можно использовать различные методики, такие как: использование групповых вставок, вынесение проверок целостности на этап выше, использование параллелизма. Кроме того загрузка больших объёмов данных может оказаться весьма трудной задачей ещё и из-за того, что ошибки чаще всего можно обнаружить только непосредственно во время загрузки. А некоторые из них можно и вовсе не найти и получить, например, дублирующиеся записи в таблицах (такое может произойти не только, когда на таблицу не наложены ограничения, но и когда, например, значение суррогатного первичного ключа генерируется автоматически), что ведёт к потенциальным проблемам с взаимодействием с базой данных. Отдельно можно рассмотреть процесс загрузки первичного наполнения в БД. Данные для первичного наполнения берутся из условно-постоянной информации. Таким образом, один и тот же источник данных можно использовать в дальнейшем, при условии, что эта информация где-то хранится. Рисунок 1. Жизненный цикл программной системы На рисунке 1 показан возможный жизненный цикл программной системы, где этап помечен красным при условии, что на нём есть зависимость от первичного наполнения. Основная необходимость в начальных данных возникает при введении системы в эксплуатацию для корректной работы. Согласно [5] одной из обязательных процедур, которую необходимо провести во время пусконаладочных работ на стадии ввода в действие автоматизированной системы, являются загрузка информации в базу данных и проверка её ведения. Кроме того первоначальные данные необходимы и для тестирования программной системы. Хотя в большинстве случаев модульные тесты используют данные, 10 добавленные только на время теста, т.е. не зависят от наполнения, но тестирование пользовательского интерфейса чаще всего производится вручную и поэтому требует наличия данных для проверки функциональности элементов интерфейса. Подводя итог, следует отметить, что процесс загрузки данных состоит из важных этапов, каждый из которых не обладает достаточной информацией, чтобы корректно исправить ошибки выполнения предыдущего этапа и полагается на его безошибочность. В результате, возникает желание повысить стабильность процесса загрузки информации в БД и минимизировать затраты на проверку ошибок. Данный процесс находит применение, как при первичном наполнении БД некоторой программной системы, так и при инкрементальном. Таким образом, возникает необходимость автоматизировать загрузку данных в базу. 11 |