ВМДС
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
VMDS — это сокращение от технологии реляционных баз данных, называемой хранилищем данных с управлением версиями , предоставляемой GE Energy как часть технологической платформы Smallworld и с самого начала разработанной для хранения и анализа очень сложных пространственных и топологических сетей, обычно используемых корпоративными коммунальными предприятиями, такими как распределение электроэнергии и телекоммуникации. .
VMDS была первоначально представлена в 1990 году и с годами улучшалась и обновлялась. Его текущая версия — 6.0.
VMDS была разработана как пространственная база данных . Это дает VMDS ряд отличительных характеристик по сравнению с обычными реляционными базами данных, состоящими только из атрибутов.
Распределенная серверная обработка
[ редактировать ]VMDS состоит из двух частей: простого, хорошо масштабируемого сервера блоков данных под названием SWMFS (Smallworld Master File Server) и интеллектуального клиентского API, написанного на C и Magik . Пространственные и атрибутивные данные хранятся в блоках данных, которые находятся в специальных файлах, называемых файлами хранилища данных, на сервере. Когда клиентское приложение запрашивает данные, оно обладает достаточным интеллектом, чтобы определить оптимальный набор необходимых блоков данных. Затем этот запрос отправляется в SWMFS, который возвращает данные клиенту через сеть для обработки.
Этот подход особенно эффективен и масштабируем при работе с пространственными и топологическими данными, которые имеют тенденцию передаваться в больших объемах и требуют большей обработки, чем простые атрибутивные данные (например, во время операции перерисовки карты). Такой подход делает VMDS хорошо подходящим для развертывания на предприятии, в котором могут участвовать сотни или даже тысячи одновременных клиентов.
Поддержка длинных транзакций
[ редактировать ]Реляционные базы данных поддерживают короткие транзакции, в которых изменения данных относительно невелики и непродолжительны по продолжительности (максимальный период между началом и окончанием транзакции обычно составляет несколько секунд или меньше).
VMDS поддерживает длительные транзакции, в которых объем данных, участвующих в транзакции, может быть значительным, а продолжительность транзакции может быть значительной (дни, недели или даже месяцы). Эти типы транзакций распространены в современных сетевых приложениях, используемых, например, в коммунальных предприятиях по распределению электроэнергии.
Из-за временного интервала длительной транзакции в этом контексте объем изменений может быть значительным (не только в рамках транзакции, но и в контексте базы данных в целом). Соответственно, вполне вероятно, что одна и та же запись может быть изменена более одного раза. Чтобы справиться с этим сценарием, VMDS имеет встроенную поддержку автоматического управления такими конфликтами и позволяет приложениям просматривать изменения и принимать только те изменения, которые являются правильными.
Пространственные и топологические возможности
[ редактировать ]Помимо традиционных функций реляционных баз данных, таких как запросы атрибутов, поля соединения, триггеры и вычисляемые поля, VMDS обладает многочисленными пространственными и топологическими возможностями. Это позволяет хранить и анализировать пространственные данные, такие как точки, тексты, полилинии, многоугольники и растровые данные.
Пространственные функции включают в себя: поиск всех объектов внутри полигона, расчет полигонов Вороного для набора объектов и выполнение кластерного анализа набора точек.
Векторным пространственным данным, таким как точки, полилинии и многоугольники, можно присвоить топологические атрибуты, которые позволяют моделировать сложные сети. Механизмы сетевого анализа предназначены для ответа на такие вопросы, как поиск кратчайшего пути между двумя узлами или как оптимизировать маршрут доставки ( задача коммивояжера ). Механизм топологии можно настроить с помощью набора правил, определяющих, как топологические объекты взаимодействуют друг с другом при добавлении новых данных или редактировании существующих данных.
Абстракция данных
[ редактировать ]В VMDS все данные представляются приложению в виде объектов. Это отличается от многих реляционных баз данных, которые представляют данные в виде строк из таблицы или результатов запроса, скажем, с использованием JDBC . VMDS предоставляет инструмент моделирования данных и базовую инфраструктуру как часть технологической платформы Smallworld , которая позволяет администраторам связывать таблицу в базе данных с экземпляром (или классом) Magik. Методы получения и установки Magik для экземпляра Magik могут быть автоматически сгенерированы, которые предоставляют поле (или столбец) таблицы. Каждая строка VMDS представляется приложению как экземпляр объекта Magik и называется RWO (или объект реального мира). Таблицы на языке Smallworld называются коллекциями.
# all_rwos hold all the rwos in the database and is heterogeneous all_rwos << my_application.rwo_set() # valve_collection holds the valve collection valves << all_rwos.select(:collection, {:valve}) number_of_valves << valves.size
Запросы строятся с использованием объектов-предикатов:
# find 'open' valves. open_valves << valves.select(predicate.eq(:operating_status, "open")) number_of_open_valves << open_valves.size
_for valve _over open_valves.elements() _loop write(valve.id) _endloop
Объединения реализованы как методы родительского RWO. Например, у менеджера может быть несколько сотрудников, которые ему подчиняются:
# get the employee collection. employees << my_application.database.collection(:gis, :employees)
# find a manager called 'Steve' and get the first matching element steve << employees.select(predicate.eq(:name, "Steve").and(predicate.eq(:role, "manager")).an_element()
# display the names of his direct reports. name is a field (or column) # on the employee collection (or table) _for employee _over steve.direct_reports.elements() _loop write(employee.name) _endloop
Выполнение транзакции:
# each key in the hash table corresponds to the name of the field (or column) in # the collection (or table) valve_data << hash_table.new_with( :asset_id, 57648576, :material, "Iron")
# get the valve collection directly valve_collection << my_application.database.collection(:gis, :valve)
# create an insert transaction to insert a new valve record into the collection a # comment can be provide that describes the transaction transaction << record_transaction.new_insert(valve_collection, valve_data, "Inserted a new valve") transaction.run()