Как устроен робот. Как работает робот пылесос, как он устроен и производит уборку. Создание роботов: тонкости дела

Faq 24.03.2019

В Oracle имеется несколько типов индексов:

· древовидные индексы (В-деревья).

· хешированные индексы (hash ).

· индексы на основе битовых карт или битовые индексы (bitmap ).

В-деревья были реализованы в Oracle практически с самого начала ее существования, затем появились хешированные индексы появились, а затем - битовые карты.

Понимание того, когда и где следует использовать конкретные типы индексов, очень важно для эффективного их применения. В-деревья используются наиболее часто, в то время как хешированные и битовые индексы лишь при наличии некоторых условий могут обеспечить существенные преимущества в выполнении определенных запросов.

Оператор создания индекса использует следующий синтаксис:

СREATE INDEX имя_индекса

ON имя_таблицы (имя_столбца, [¼])

Для удаления индекса используется команда

DROP INDEX <ИМЯ> (удалить)

Можно перестроить существующий индекс без его удаления и повторного создания при помощи команды:

ALTER INDEX<ИМЯ> REBUILD (перестроить индекс)

ALTER INDEX<ИМЯ> UNUSABLE (отключить индекс на время,

чтобы снова включить обратно при помощи REBUILD)

B-деревья

Видимо, наиболее популярным подходом к организации индексов в базах данных является использование техники B-деревьев. B-дерево содержит по одному индексному элементу для каждой строки таблицы, в которой имеется непустое (NOT NULL) индексное значение. С точки зрения внешнего логического представления B-дерево - это сбалансированное сильно ветвистое дерево во внешней памяти (рис.5.3).

Рис. 5.3 - Древовидный индекс по текстовому столбцу

С точки зрения физической организации B-дерево представляется как мультисписочная структура страниц внешней памяти, т.е. каждому узлу дерева соответствует блок внешней памяти (страница). Внутренние и листовые страницы обычно имеют разную структуру.

В типовом случае структура внутренней страницы выглядит следующим образом:



При этом выдерживаются следующие свойства:

ключ(1) <= ключ(2) <= ... <= ключ(n);

в странице дерева Nm находятся ключи k со значениями ключ(m) <= k <= ключ(m+1).

Листовая страница обычно содержит значение индекса и идентификаторы строк (ROWID) и имеет следующую структуру:

Листовая страница обладает следующими свойствами:

· ключ(1) < ключ(2) < ... < ключ(t);

· сп(r) - упорядоченный список идентификаторов кортежей (tid), включающих значение ключ(r);

· листовые страницы связаны одно- или двунаправленным списком.

Поиск в B-дереве - это прохождение от корня к листу в соответствии с заданным значением ключа. Заметим, что поскольку деревья сильно ветвистые и сбалансированные, то для выполнения поиска по любому значению ключа потребуется одно и то же (и обычно небольшое) число обменов с внешней памятью. Более точно, в сбалансированном дереве, где длины всех путей от корня к листу одни и те же, если во внутренней странице помещается n ключей, то при хранении m записей требуется дерево глубиной log n (m). Если n достаточно велико (обычный случай), то глубина дерева невелика, и производится быстрый поиск.

Основной "изюминкой" B-деревьев является автоматическое поддержание свойства сбалансированности. Рассмотрим, как это делается при выполнении операций занесения и удаления записей.

При занесение новой записи выполняется:

· Поиск листовой страницы. Фактически, производится обычный поиск по ключу. Если в B-дереве не содержится ключ с заданным значением, то будет получен номер страницы, в которой ему надлежит содержаться, и соответствующие координаты внутри страницы.

· Помещение записи на место. Естественно, что вся работа производится в буферах оперативной памяти. Листовая страница, в которую требуется занести запись, считывается в буфер, и в нем выполняется операция вставки. Размер буфера должен превышать размер страницы внешней памяти.

· Если после выполнения вставки новой записи размер используемой части буфера не превосходит размера страницы, то на этом выполнение операции занесения записи заканчивается. Буфер может быть немедленно вытолкнут во внешнюю память, или временно сохранен в оперативной памяти в зависимости от политики управления буферами.

· Если же возникло переполнение буфера (т.е. размер его используемой части превосходит размер страницы), то выполняется расщепление страницы. Для этого запрашивается новая страница внешней памяти, используемая часть буфера разбивается, грубо говоря, пополам (так, чтобы вторая половина также начиналась с ключа), и вторая половина записывается во вновь выделенную страницу, а в старой странице модифицируется значение размера свободной памяти. Естественно, модифицируются ссылки по списку листовых страниц.

· Чтобы обеспечить доступ от корня дерева к заново заведенной странице, необходимо соответствующим образом модифицировать внутреннюю страницу, являющуюся предком ранее существовавшей листовой страницы, т.е. вставить в нее соответствующее значение ключа и ссылку на новую страницу. При выполнении этого действия может снова произойти переполнение теперь уже внутренней страницы, и она будет расщеплена на две. В результате потребуется вставить значение ключа и ссылку на новую страницу во внутреннюю страницу-предка выше по иерархии и т.д.

· Предельным случаем является переполнение корневой страницы B-дерева. В этом случае она тоже расщепляется на две, и заводится новая корневая страница дерева, т.е. его глубина увеличивается на единицу.

При удалении записи выполняются следующие действия:

· Поиск записи по ключу. Если запись не найдена, то удалять ничего не нужно.

· Реальное удаление записи в буфере, в который прочитана соответствующая листовая страница.

· Если после выполнения этой подоперации размер занятой в буфере области оказывается таковым, что его сумма с размером занятой области в листовых страницах, являющихся левым или правым братом данной страницы, больше, чем размер страницы, операция завершается.

· Иначе производится слияние с правым или левым братом, т.е. в буфере производится новый образ страницы, содержащей общую информацию из данной страницы и ее левого или правого брата. Ставшая ненужной листовая страница заносится в список свободных страниц. Соответствующим образом корректируется список листовых страниц.

· Чтобы устранить возможность доступа от корня к освобожденной странице, нужно удалить соответствующее значение ключа и ссылку на освобожденную страницу из внутренней страницы - ее предка. При этом может возникнуть потребность в слиянии этой страницы с ее левым или правыми братьями и т.д.

· Предельным случаем является полное опустошение корневой страницы дерева, которое возможно после слияния последних двух потомков корня. В этом случае корневая страница освобождается, а глубина дерева уменьшается на единицу.

Как видно, при выполнении операций вставки и удаления свойство сбалансированности B-дерева сохраняется, а внешняя память расходуется достаточно экономно.

Проблемой является то, что при выполнении операций модификации слишком часто могут возникать расщепления и слияния. Чтобы добиться эффективного использования внешней памяти с минимизацией числа расщеплений и слияний, применяются более сложные приемы, в том числе:

· упреждающие расщепления, т.е. расщепления страницы не при ее переполнении, а несколько раньше, когда степень заполненности страницы достигает некоторого уровня;

· переливания, т.е. поддержание равновесного заполнения соседних страниц;

· слияния 3-в-2, т.е. порождение двух листовых страниц на основе содержимого трех соседних.

Следует заметить, что при организации мультидоступа к B-деревьям, характерного при их использовании в СУБД, приходится решать ряд нетривиальных проблем. Конечно, грубые решения очевидны, например монопольный захват B-дерева на все выполнение операции модификации. Но существуют и более тонкие решения.

Сбалансированное дерево автоматически не уравновешивает распределение ключей в пределах дерева так, чтобы половина ключей находилась бы на одной стороне В-дерева, а другая половина - на другой. Очевидно, что нет необходимости перестраивать дерево всякий раз, когда добавляются или удаляются ключи. Однако если ключи добавляются или удаляются только на одной стороне дерева, то распределение индексных ключей может стать неравномерным, с изрядным числом разреженных и даже опустошенных блоков по одну сторону дерева. В этом случае индекс рекомендуется перестроить.

На В-деревьях для извлечения данных по запросу может использоваться механизм быстрого полного просмотра (fast full scan ). Этот механизм дает существенные преимущества, если все запрошенные из конкретной таблицы данные могут быть получены только из индекса. При быстром полном просмотре эффективный многоблочный ввод/вывод, обычно применяемый для полных просмотров таблиц, используется для прочтения всех листовых блоков В-дерева. Поскольку число листовых блоков индекса, скорее всего, намного меньше, чем блоков данных в таблице, для выполнения запроса требуется просмотреть меньшее число блоков. Поэтому просмотр индекса совершится значительно быстрее, чем полный просмотр таблицы, хотя иногда неравномерное распределение ключей снижает эффективность быстрого полного просмотра, поскольку требуется просмотреть большее число листовых блоков (содержащих малое или вообще нулевое число элементов). При этом следует учитывать наличие или отсутствие в таблице пустых значений, которые, как было сказано выше, в индекс не заносятся.

В-деревья можно использовать для поиска данных, как по условиям равенства, так и по условиям неравенства. Это единственный тип индексов, который можно использовать для предикатов неравенства: LIKE, BETWEEN, “>”, “>=”, “<”, “<=”. Исключение представляет случай использования предиката LIKE при сравнении с шаблоном вида ‘%выражение’ или ‘_выражение ’. В-деревья хранят только непустые значения ключей, так что можно построить разреженное В-дерево.

Индексы Oracle обеспечивают быстрый доступ к строкам таблиц, сохраняя отсортированные значения указанных столбцов и используя эти отсортированные значения для быстрого нахождения ассоциированных строк таблицы. Индексы позволяют находить строку с определенным значением столбца, просматривая при этом лишь небольшую часть общего объема строк таблицы. Таким образом правильное использование индексов сокращает до минимума количество дорогостоящих операций ввода-вывода.

Применение индексов представляет собой компромисс между ускорением получения результатов запросов и замедлением обновлений и вставок данных. Первая часть этого компромисса – ускорение запросов – довольно очевидна: если поиск выполняется по отсортированному индексу вместо полного сканирования всей таблиц, то запрос проходит намного быстрее. Но всякий раз, когда вы обновляете, вставляете или удаляете строку таблицы с индексами, индексы также должны быть обновлены соответствующим образом. То есть такие операции на таблицах с индексами обходятся дороже.

Вообще говоря, если таблицы в основном используются для чтения (выборки) информации, как в хранилищах данных, то лучше иметь много индексов. Если база данных относится к типу OLTP, с большим количеством вставок, обновлений и удалений, то лучше обойтись меньшим числом индексов.

Если только вам не нужно обращаться к большинству сток таблицы, индексированные запросы обеспечивают более быстрое получение результатов, чем запросы, не использующие индексы. Не существует ограничений на количество индексов, которые могут относиться к одной таблице Oracle, но, как упоминалось ранее, от их количества зависит производительность. Индекс полностью прозрачен для пользователя – т.е. оператор SQL пользователя не должен изменяться в результате создания индексов. Однако разработчикам приложений для построения эффективных запросов следует хорошо представлять себе, что такое индексы и как они работают.

Индексы могут относиться к нескольким типам, наиболее важные из которых перечислены ниже:

  • Уникальные и неуникальные индексы. Уникальные индексы основаны на уникальном столбце – обычно вроде номера карточки социального страхования сотрудника. Хотя уникальные индексы можно создавать явно, Oracle не рекомендует это делать. Вместо этого следует использовать уникальные ограничения. Когда накладывается ограничение уникальности на столбец таблицы, Oracle автоматически создает уникальные индексы по этим столбцам.
  • Первичные и вторичные индексы. Первичные индексы – это уникальные индексы в таблице, которые всегда должны иметь какое-то значение и не могут быть равны null. Вторичные индексы – это прочие индексы таблицы, которые могут и не быть уникальными.
  • Составные индексы – индексы, содержащие два или более столбца из одной и той же таблицы. Они также известны как сцепленные индексы (concatenated index). Составные индексы особенно полезны для обеспечения уникальности сочетания столбцов таблицы в тех случаях, когда нет уникального столбца, однозначно идентифицирующего строку.

Руководство по созданию индексов

Хотя хорошо известно, что индексы повышают производительность базы данных, следует знать, как их заставить работать должным образом. Добавление ненужных или неподходящих индексов к таблице может даже привести к снижению производительности. Ниже предоставлены некоторые рекомендации по созданию эффективных индексов в базе данных Oracle.

  • Индекс имеет смысл, если нужно обеспечить доступ одновременно не более чем к 4-5% данных таблицы. Альтернативной использования индекса для доступа к данным строки является полное последовательное чтение таблицы от начала до конца, что называется полным сканированием таблицы. Полное сканирование таблицы больше подходит для запросов, которые требуют извлечения большего процента данных таблицы. Помните, что применение индексов для извлечения строк требует двух операций чтения: индекса и затем таблицы.
  • Избегайте создания индексов для сравнительно небольших таблиц. Для таких таблиц больше подходит полное сканирование. В случае маленьких таблиц нет необходимости в хранении данных и таблиц, и индексов.
  • Создавайте первичные ключи для всех таблиц. При назначении столбца в качестве первичного колюча Oracle автоматически создаст индекс по этому столбцу.
  • Индексируйте столбцы, участвующие в многотабличных операциях соединения.
  • Индексируйте столбцы, которые часто используются в конструкциях WHERE.
  • Индексируйте столбцы, участвующие в операциях ORDER BY и GROUP BY или других операциях, таких как UNION и DISTINCT, включающих сортировку. Поскольку индексы уже отсортированы, объем работы по выполнению необходимой сортировки данных для упомянутых операций будет существенно сокращен.
  • Столбцы, стоящие из длинно-символьных строк, обычно плохие кандидаты на индексацию.
  • Столбцы, которые часто обновляются, в идеале не должны быть индексированы из-за связанных с этим накладных расходов.
  • Индексируйте таблицы в которых мало строк имеют одинаковые значения.
  • Сохраняйте количество индексов небольшим.
  • Составные индексы могут понадобиться там, где одностолбцовые значения сами по себе не уникальны. В составных индексах первым столбцом ключа должен быть столбец в котором количество строк с одинаковым значением минимально.

Всегда помните золотое правило индексации таблиц: индекс таблицы должен быть основан на типах запросов, которые будут выполняться над столбцами этой таблицы. На таблице можно создавать более одного индекса: например, можно создать индекс на столбце X, или столбце Y, или обоих сразу, а также один составной индекс на обоих столбцах. Принимая правильное решение относительно того, какие индексы следует создавать, подумайте о наиболее часто используемых типах запросов данных таблицы.

Схемы индексации Oracle

Oracle предлагает несколько схем индексации, соответствующих требованиям различных типов приложений. На фазе проектирования после тщательного анализа конкретных требований приложения, необходимо выбрать правильный тип индекса.

(B*tree)

В реализации индексов на основе B-деревьев используется концепция сбалансированного (на что указывает буква ‘B’ (balanced)) дерева поиска в качестве основы структуры индекса. В Oracle имеется собственный вариант B-дерева. Это обычные индексы, создаваемые по умолчанию, когда вы применяете оператора CREATE INDEX.

Индексы на основе B-деревьев структурированы в форме обратного дерева, где блоки верхнего уровня называются блоками ветвей (branch blocks), а блоки нижнего уровня – листовыми блоками (leaf blocks). В иерархии узлов все узлы кроме вершины, или корневого узла, имеют родительский узел и могут иметь ноль или более дочерних узлов. Если глубина древовидной структуры, т.е. количество уровней, одинакова от каждого листового блока до корневого узла, то такое дерево называется сбалансированным, или B-деревом.

B-деревья автоматически поддерживают необходимый уровень индекса по размеру таблицы. B-деревья также гарантируют, что индексные блоки всегда будут заполнены не меньше, чем наполовину, и менее, чем на 100%. B-деревья допускают операции выборки, вставки и удаления с очень небольшим количеством операций ввода-вывода на один оператор. Большинство B-деревьев имеет всего три и менее уровней. При использовании B-дерева нужно читать только блоки B-дерева, так что количество операций ввода-вывода будет ограничено числом уровней B-дерева (скажем, тремя) плюс две операции ввода-вывода на выполнение обновления или удаления (одна для чтения и одна для записи). Для выполнения поиска по B-дереву понадоисят всего три или менее обращений к диску.

Реализация B-дерева от Oracle – всегда сохраняет дерево сбалансированным. Листовые блоки содержат по два элемента: индексированные значения столбца и соответствующий идентификатор ROWID для строки, которая содержит это значение столбца. ROWID – уникальный указатель Oracle, идентифицирующий физическое местоположение строки и обеспечивающий самый быстрый способ доступа к строке в базе данных Oracle. Сканирование индекса быстро дает ROWID строки, и отсюда можно быстро получить к ней доступ непосредственно. Если запрос нуждается лишь в значении индексированного столбца, то конечно, последний шаг исключается, поскольку извлекать дополнительные данные, кроме прочитанных из индекса, не потребуется.

Оценка размера индекса

Для оценки размера нового индекса можно использовать пакет DBMS_SPACE. Процедуре CREATE_INDEX_COST этого пакета потребуется передать оператор DDL, создающий индекс, в качестве атрибута.

SET SERVEROUTPUT ON DECLARE l_index_ddl varchar2(1000); l_used_bytes NUMBER; l_allocated_bytes NUMBER; BEGIN DBMS_SPACE.create_index_cost (ddl => "create index repsons_idx on EMP(ENAME)", used_bytes => l_used_bytes, alloc_bytes => l_allocated_bytes); DBMS_OUTPUT.PUT_LINE ("RESULT:"); DBMS_OUTPUT.PUT_LINE ("used_bytes = " || l_used_bytes || " byte"); DBMS_OUTPUT.PUT_LINE ("alloc_bytes = " || l_allocated_bytes || " byte"); END; /

Обратите внимание на отличие между атрибутами, касающимися размера, в процедуре CREATE_INDEX_COST:

  • Used_bytes показывает количество байт, которыми представлены данные индекса;
  • Alloc_bytes показывает количество байт, которое займет индекс в табличном пространстве после его создания.

Создание индекса

Индекс создается с помощью оператора CREATE INDEX

CREATE INDEX employee_id ON employee(employee_id) TABLESPACE MY_INDEXES;

По умолчанию Oracle допускает дублирование значения в столбцах индекса, которые также называются ключевыми столбцами. Однако можно специфицировать уникальный индекс, что исключит дублирование значений столбца в нескольких строках.

Для создания уникального индекса служит оператор CREATE UNIQUE INDEX.

Специальные типы индексов

Нормальный или типовой индекс, который создается в базе данных, называется индексом кучи (heap index), или неупорядоченным индексом. Oracle также предоставляет несколько специальных типов индексов для специфических нужд.

Битовые индексы (bitmap indexes)

Битовые индексы используют битовые карты для указания значения индексированного столбца. Это идеальный индекс для столбца с низкой кардинальностью (число уникальных записей в таблице мало) при при большом размере таблицы. Эти индексы обычно не годятся для таблиц с интенсивным обновлением, но хорошо подходят для приложений хранилищ данных.

Битовые индексы состоят из битового потока (единиц и нулей) для каждого столбца индекса. Битовые индексы очень компактны по сравнению с нормальными индексами на основе B-деревьев.

Для создания битового индекса используется оператор

CREATE BITMAP INDEX gender_dx ON employee(gender) TABLESPACE MY_INDEXES;

Иногда можно наблюдать значительное повышение производительности при замене обычных индексов B-дерева на битовые в некоторых очень крупных таблицах. Однако каждый элемент битового индекса открывает огромное количество строк в таблице, так что когда данные обновляются,вставляются или удаляются из таблицы, то необходимые обновления битового индекса очень велики., и сам индекс может существенно увеличиться в размере. Единственный способ обойти это увеличение размера индекса с последующим падением производительности заключается в регулярной его перестройке. Битовый индекс – не слишком разумная альтернатива для таблиц, подвергающихся большому количеству вставок, удалений и обновлений.

Индексы с реверсированным ключом

Индексы с реверсированным ключом – это, по сути, то же самое, что и индексы B-деревьев, за исключением того, что байты данных ключевого столбца при индексации меняют порядок на противоположный. Порядок столбцов остается нетронутым, меняется только порядок байтов. Самое большое преимущество применения индексов с реверсивным ключом состоит в том, что они исключают неприятные последствия упорядоченной вставки значений в индекс. Вот как создается индекс с реверсированным ключом:

SQL> CREATE INDEX reverse_idx ON employee(emp_id) REVERSE;

При использовании индекса с реверсированным ключом базы данных не сохраняет ключи индекса друг за другом в лексикографическом порядке. Таким образом, когда в запросе присутствует предикат неравенства, ответ получается медленнее, поскольку база данных вынуждена выполнять полное сканирование таблицы. При индексе с реверсированным ключом база данных не может запустить запрос по диапазону ключа индекса.

Индексы со сжатым ключом

Сэкономить пространство хранения индекса вместе с повышением производительности можно за счет создания индекса со сжатым ключом. Всякий раз, когда индексируемый ключ имеет повторяющийся компонент, или же создается уникальный многостолбцовый индекс, получается выигрыш от использования сжатия ключа. Вот пример:

SQL> CREATE INDEX emp_indx1 ON employees(ename) TABLESPACE MY_INDEXES COMPRESS 1;

Приведенный выше оператор сжимает все дублированные вхождения индексированного ключа в листовом блоке индекса (на уровне 1).

Индексы на основе функций

Индексы на основе функций предварительно вычисляют значения функций по заданному столбцы и сохраняют результат в индексе. Когда конструкция WHERE содержит вызовы функций, то основанные на функциях индексы являются идеальным способом индексирования столбца.

Ниже показано, как создать индекс на основе функции LOWER

SQL> CREATE INDEX lastname _idx ON employees(LOWER(l_name));

Этот оператор CREATE INDEX создаст индекс по столбцу l_name, хранящему фамилии сотрудников в верхнем регистре. Однако этот индекс будет основан на функции, поскольку база данных создаст его по столбцу l_name, применив к нему предварительно функцию LOWER для преобразования его значения в нижний регистр.

Секционированные индексы

Секционированные индексы используются для индексации секционированных таблиц. Oracle предлагает два типа индексов для таких таблиц: локальные и глобальные.

Существенное различие между ними заключается в том, что локальные индексы основаны на разделах таблицы, по которой они созданы. Если таблица секционирована на 12 разделов по диапазонам дат, то индексы также будут распределены по тем же 12 разделам. Другими словами, между разделами индексов и разделами таблиц существует соответствие «один к одному». Такого соответствия нет между глобальными индексами и разделами таблицы, потому что глобальные индексы секционируются независимо от базовых таблиц.

В следующих разделах будут раскрыт важные различия между управлением глобального секционированными индексами и локально секционированными индексами.

Глобальные индексы

Глобальные индексы на секционированных таблицах могут быть как секционированными, так и несекционированными. Глобальные несекционированные индексы подобны обычным индексам Oracle для несекционированных таблиц. Для создания таких индексов применяется обычный синтаксис CREATE INDEX.

Ниже приведен пример глобального индекса на таблице ticket_sales:

SQL> CREATE INDEX tickersales_idx ON ticket_sales(month) GLOBAL PARTITION BY range(month) (PARTITION ticketsales1_idx VALUES LESS THAN (3) PARTITION ticketsales1_idx VALUES LESS THAN (6) PARTITION ticketsales2_idx VALUES LESS THAN (9) PARTITION ticketsales3_idx VALUES LESS THAN (MAXVALUE);

Обратите внимание, что управление глобально секционированными индексами требует серьезных усилий. Всякий раз, когда происходит какое-т о действие DDL над секционированной таблицей, ее глобальные индексы требуют перестройки. Действия DDL над лежащей в основе таблице помечают глобальные индексы как недействительные. По умолчанию любая операция обслуживания секционированной таблицы делает недействительными глобальные индексы.

Давайте в качестве примера воспользуемся таблицей ticket_sales, чтобы разобраться, почему это так. Предположим, что вы ежеквартально уничтожаете самый старый раздел, чтобы освободить место для нового раздела, в который поступят данные за новый квартал. Когда уничтожается раздел, относящийся к таблице ticket_sales, глобальные индексы могут стать недействительными, потому что часть данных, на которые они указывают, перестают существовать. Чтобы предотвратить такое объявление недействительным индекса из-за уничтожения раздела, необходимо использовать опцию UPDATE GLOBAL INDEXES вместе с оператором DROP PARTITION:

SQL> ALTER TABLE ticket_sales DROP PARTITION sales_quarter01 UPDATE GLOBAL INDEXES;

Если не включить оператор UPDATE GLOBAL INDEXES, то все глобальные индексы станут недействительными. Опцию UPDATE GLOBAL INDEXES можно также использовать при добавлении, объединении, обмене, слиянии, перемещении, разделении или усечении секционированных таблиц. Разумеется, с помощью ALTER INDEX..REBUILD можно перестраивать любой индекс, который становится недействительным, но эта опция также требует дополнительных затрат времени и обслуживания.

При небольшом количестве листовых блоков индекса, что приводит к высокой конкуренции Oracle рекомендует использовать глобальные индексы с хэш-секционированием. Синтаксис для создания хэш-секционированного глобального индекса подобен тому, что применяется для хэш-секционированной таблицы. Например, следующий оператор создает хэш-секционированный глобальный индекс:

SQL> CREATE INDEX hgidx ON tab (c1,c2,c3) GLOBAL PARITION BY HASH (c1,c2) (PARTITION p1 TABLESPACE tsb_1, PARTITION p2 TABLESPACE tsb_2, PARTITION p3 TABLESPACE tsb_3, PARTITION p4 TABLESPACE tsb_4,);

Локальные индексы

Локально секционированные индексы, в отличие от глобально секционированных индексов, имею отношение «один к одному» с разделами таблицы. Локально секционированные индексы можно создавать в соответствии с разделами и даже подразделами. База данных конструирует индекс таким образом, чтобы он был секционирован так же, как и его таблица. При каждой модификации раздела таблицы база автоматически сопровождает это соответствующей модификацией раздела индекса. Это, наверное, самое большое преимущество использования локально секционированных индексов – Oracle автоматически перестраивает их всегда, когда уничтожается раздел или над ним выполняется какая-то другая операция DDL.

Ниже приведен простой пример создания локально секционированного индекса на секционированной таблице:

SQL> CREATE INDEX ticket_no_idx ON Ticket_sales(ticket_no) LOCAL TABLESPACE localidx_01;

Невидимые индексы

По умолчанию оптимизатор «видит» все индексы. Тем не менее, можно создать невидимый индекс, который оптимизатор не обнаруживает и не принимает во внимание при создании плана выполнения оператора. Невидимый индекс можно применять в качестве временного индекса для определенных операций или его тестирования перед тем, как сделать его «официальным». Вдобавок, иногда объявления индекса невидимым можно использовать в качестве альтернативы уничтожению индекса или объявлению его недоступным. Сделать индекс невидимым можно временно, чтобы протестировать эффект от его уничтожения.

База данных поддерживает невидимый индекс точно так же, как и нормальный (видимый) индекс. После объявления индекса невидимым, его и все прочие невидимые индексы можно сделать вновь видимым для оптимизатора, установив значение параметра optimizer_use_invisible_index равным TRUE на уровне сеанса или всей системы. Значением этого параметра по умолчанию является FALSE, а это означает, что оптимизатор по умолчанию не может использовать невидимые индексы.

Создание невидимого индекса.

Чтобы сделать индекс невидимым, к оператору CRETE INDEX нужно добавить конструкцию INVISIBLE.

С помощью команды ALTER INDEX можно превратить существующий индекс в невидимый.

ALTER INDEX test_idx INVISIBLE;

И обратная команда

ALTER INDEX test_idx VISIBLE;

Приведенный ниже запрос к представлению DBA_INDEXES показывает состояние видимости индекса:

Мониторинг использования индекса

Если вы сомневаетесь в использовании определенного индекса, можете попросить Oracle выполнить мониторинг его применения. Таким образом, если индекс окажется избыточным, его можно уничтожить и сэкономить место в хранилище, а также снизить накладные расходы на операции DML.

Опишем, что потребуется сделать для отслеживания индекса в базе данных. Предположим, что вы пытаетесь узнать, используется ли индекс p_key_sales в определенных запросах к таблице sales. Обеспечьте репрезентативный промежуток времени для оценки использования индекса. Для базы данных OLTP это промежуток может быть относительно коротким. Для хранилища данных может понадобится запустить тестовый мониторинг на несколько дней, чтобы точно проверить, как используется индекс.

Чтобы запустить мониторинг использования индекса, войдите в базу данный как владелец индекса p_keyPsales и запустите следующую команду:

SQL> ALTER INDEX p_key_sales MONITORING USAGE;

Теперь запустите какие-нибудь запросы к таблице sales. Завершите мониторинг, применив следующую команду:

SQL> ALTER INDEX p_key_sales NOMONITORING USAGE;

После этого можно запросить представление словаря данных V$OBJECT_USAGE для определения того, используется ли индекс p_key_sales.

Причина по которой нельзя узнать количество случаев использования индекса, связана с тем, что база данных выполняет мониторинг его использования только на фазе разбора (parsing); если бы разбор производился при каждом выполнении, пострадала бы производительность.

Обслуживание индексов

Данные индекса постоянно изменяются из-за DML-действий, связанных с его таблицей. Индексы часто становятся слишком большими, если происходит много удалений сток, потому что пространство, занятое удаленными значениями, автоматически повторно индексом не используется. За счет периодического применения команды REBUILD можно реорганизовать индексы и сделать их более компактными, а потому и более эффективными. Команда REBUILD также служит для изменения параметров хранения, которые устанавливаются во время начального создания индекса.

ALTER INDEX sales_idx REBUILD;

Перестройка индексов лучше уничтожения и воссоздания неудачного индекса, потому что при этой операции пользователи продолжают иметь доступ к индексу в процессе его перестройки. Однако индексы в процессе перестройки накладывают много ограничений на действия пользователя. Еще более эффективный способ перестройки индексов состоит в том, чтобы сделать это в оперативном (online) режиме, как показано в следующем примере. Во время оперативной перестройки индекса разрешено применение всех операций DML, но не операций DDL.

ALTER INDEX sales_idx REBUILD ONLINE;

Оперативную перестройку индекса можно ускорить за счет добавления к показанному выше оператору ALTER INDEX конструкции ONLINE NOLOGGING. После добавления этой конструкции база данных не будет генерировать данные повторного выполнения для операции перестройки индекса.

Будников Константин Андреевич

Цель работы – оценить вклад создания роботов, изучить устройство простого робота и условия, при которых он работает.

Задачи исследования:

Изучить литературу по теме «Роботы»;

Узнать об истории изобретения роботов;

Провести опыты по изучению работы роботов.

Методы:

- теоретический анализ различных источников информации;

Постановка опытов;

Обработка материалов эксперимента;

Наблюдение;

Проведя исследование, я сделал выводы, что роботы не способны заменить человека. Но они могут избавить людей от тяжелой и скучной работы.

Скачать:

Предварительный просмотр:

МУНИЦИПАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ДЛЯ ДЕТЕЙ ДОШКОЛЬНОГО И МЛАДШЕГО ШКОЛЬНОГО ВОЗРАСТА

НАЧАЛЬНАЯ ШКОЛА – ДЕТСКИЙ САД №43

Городское соревнование юных исследователей «Шаг в будущее – Юниор»

Роботы. Как они устроены

Учебно - исследовательская работа

Исполнитель: Будников Константин Андреевич, ученик 4 – В класса МОУ НШ-ДС №43

Руководитель: Басманова

Елена Геннадьевна,

Учитель начальных классов МОУ НШ-ДС №43

Сургут, 2011

Введение…………………………………………………………………….3

1.1. История создания первых роботов ………………………………....4

1.2. Преимущества и недостатки изобретения роботов…….……...5

  1. Виды роботов………………………………………………..………..6
  1. Устройство роботов……………………………………………….7

Глава 2. Опытно – экспериментальное исследование ……….……..10

Заключение……………………………………………………………......11

Список источников……………………………………………… …….12

Введение

Процесс научных открытий -

Это, в сущности,

непрерывное бегство от чудес.

Цель работы – оценить вклад создания роботов, изучить устройство простого робота и условия, при которых он работает.

Задачи исследования:

Изучить литературу по теме «Роботы»;

Узнать об истории изобретения роботов;

Провести опыты по изучению работы роботов.

Методы:

- теоретический анализ различных источников информации;

Постановка опытов;

Обработка материалов эксперимента;

Наблюдение;

Анализ.

Для проведения исследований мы использовали одну микросхему драйвера моторов и два фотоэлемента.

Глава 1. Роботы: история создания, использование человеком

1.1. История создания роботов

Ро́бот - аппарат, способный самостоятельно взаимодействовать с внешним миром и обладающий искусственным интеллектом или его зачатками. Обычно представляется в виде механического человека, реже предполагается колёсный робот или неантропоморфный. Часто роботами в рекламных целях или по незнанию называют автоматы и удалённо управляемые людьми устройства. Человекоподобный робот зовётся андроидом.

Слово «робот» было придумано чешским писателем Карелом Чапеком и его братом Йозефом и впервые использовано в пьесе Чапека « Р. У. Р. » («Россумские универсальные роботы», ). До появления промышленных роботов считалось, что роботы должны выглядеть подобно людям.

Идея искусственных созданий впервые упоминается в древнегреческом мифе о Кадме, который, убив дракона, разбросал его зубы по земле и запахал их, из зубов выросли солдаты, и в другом древнегреческом мифе о Пигмалионе , который вдохнул жизнь в созданную им статую - Галатею.

Самый древний в истории механический человек был сделан в 1540 году итальянцем Джанелло Делла Торре. Для развлечения императора Карла V он смастерил лютнистку, которая умела ходить и извлекала из своего инструмента звуки. Спустя два века швейцарский часовщик Пьер Жакке- Дроз продолжил работу начатую Делла Торре. Он конструировал красивейшие автоматы, которые функционировали за счет пружинного механизма, похожего на часовой.

Активное производство роботов началось в 1970-е годы. Прежде всего, они стали использоваться в производстве, для выполнения однообразных (и часто опасных) операций. Больше всего промышленных роботов используется в автомобильной промышленности, где они работают на штамповочных и сварочных участках, в покрасочных камерах, на сборке. Разумеется, роботы не могли сразу заменить людей в промышленности, но доля человеческого труда в производстве с тех пор неуклонно сокращается. Полностью автоматизированные фабрики, такие как фабрика IBM для сборки клавиатур в Техасе, называются "фабрики без освещения". Люди там уже не нужны: абсолютно всё производство, от момента выгрузки материалов и до получения готовой продукции у погрузочных ворот, полностью роботизировано и может работать круглосуточно и без выходных.

1.2 Преимущества и недостатки изобретения роботов

Роботы обладают следующими потенциальными преимуществами перед людьми:

  1. теоретическая бессмертность - если какая-то деталь робота изнашивается, её легко заменить новой;
  2. потенциальная приспособленность к любым условиям обитания, где материалы, из которых сделан робот, будут находиться в стабильном состоянии;
  3. легкость получения новых особей - можно собирать промышленным способом;
  4. легкость обучения - достаточно скопировать программу другого робота в нового робота;
  5. робота можно отключить, если он не нужен, и хранить в таком виде.

Однако пока у роботов по сравнению с людьми более проявляются недостатки:

  1. изготовление более-менее универсального и надёжного робота обходится слишком дорого;
  2. настоящий искусственный интеллект не создан.

Очевидно, вследствие технического прогресса цена робота, выполняющего один и тот же набор функций, должна снижаться. Поэтому следует ожидать исчезновения первого указанного недостатка со временем. Второй же недостаток - отсутствие искусственного интеллекта - вполне может оказаться непреодолимым хотя бы потому, что мы не знаем, как работает интеллект естественный, и не факт, что когда-либо узнаем.

1.3. Виды роботов

Промышленные роботы

Появление станков с числовым программным управлением (ЧПУ ) привело к созданию программируемых манипуляторов для разнообразных операций по загрузке и разгрузке станков. Появление в 70-х гг. микропроцессорных систем управления и замена специализированных устройств управления на программируемые контроллеры позволили снизить стоимость роботов в три раза, сделав рентабельным их массовое внедрение в промышленности. Этому способствовали объективные предпосылки развития промышленного производства.

Бытовые роботы

Одним из первых примеров удачной массовой промышленной реализации бытовых роботов стала механическая собачка AIBO корпорации Sony . В сентябре в свободную продажу впервые поступили первые человекообразные роботы « Вакамару » производства фирмы Mitsubishi . Робот стоимостью $15 тыс. способен узнавать лица, понимать некоторые фразы, давать справки, выполнять некоторые секретарские функции, следить за помещением. Всё большую популярность набирают роботы-уборщики, по своей сути - автоматические пылесосы, способные самостоятельно прибраться в квартире и вернуться на место для подзарядки без участия человека.

По всей видимости, оружие, используемое сегодня, понемногу теряет эффективность и актуальность в борьбе с врагом. Или же оно не настолько универсально и функционально, если ученые не перестают искать оружие, поражающее воображение тонкостью, миниатюрными размерами и смертельной опасностью. Израильские ученые взялись за разработку проекта, предусматривающего с помощью нанотехнологий создать роботов по размерам меньше обычной осы, которые будут способны выследить, сфотографировать и убить жертву. Также, применение нанотехнологий позволит сделать процесс слежки и атаки вражеских объектов более скрытным и опасным.

Роботы-учёные

Первые роботы-учёные Адам и Ева были созданы в рамках проекта Robot Scientist университета Аберистуита и в 2009 году одним из них было совершено первое научное открытие.

Роботы 1-го поколения были большими механическими «рабочими», предназначенными для тяжелой промышленности. Но потом, благодаря развитию и совершенствованию технологии, родилась новая серия роботов, более умелых и в то же время более похожих на тех, которых придумали за долго до этого литератора и кинематографисты. Это – так называемые «антропоморфные», то есть похожие на человека, роботы, которые делают то, на что не способны промышленные механизмы. Можно привести несколько примеров: они ходят, звонят по телефону и даже играют в настольный теннис.

Роботы игрушки

Многие крупные фирмы, специализирующиеся на производстве игрушек, работают над ними и уже представили общественности эти разработки. Среди роботов «сделай сам» – управляемый дистанционно футболист, робот-паук, который замечает препятствия, и другой, двигающийся под воздействием изменения освещения. Самый большой называется 65 230 , состоит из 400 деталей и снабжен 5 электродвигателями.

1.4. Устройство роботов

Так как же устроен робот? Что помогает ему двигаться? Их каких деталей он состоит?

Роботам требуются портативные аккумуляторы чрезвычайно высокой ёмкости, характеристики которых превосходят имеющиеся на рынке образцы. Проблемы адекватного энергообеспечения роботов не решены до сих пор. Решением могут стать атомные установки и , которые используются на космических зондах для дальних перелётов, с такими аккумулятором робот сможет работать 50-100 лет без зарядки

Также необходимы роботу двигатели. В наше время в качестве двигателей часто используются шаговые электродвигатели и сервоприводы .

Существуют разработки двигателей, не использующих в своей конструкции моторов: например, технология сокращения материала под действием электрического тока (или поля) которая позволяет добиться более точного соответствия движения робота натуральным плавным движениям живых существ.

Внешний вид

В Японии не прекращаются разработки роботов, имеющих внешний вид, на первый взгляд неотличимый от человеческого. Развивается техника имитации эмоций и мимики «лица» роботов.

В июне 2009 года ученые Токийского университета представили человекоподобного робота «KOBIAN», способного выражать свои эмоции - счастье, страх, удивление, грусть, гнев, отвращение - с помощью жестов и мимики. Робот способен открывать и закрывать глаза, двигать губами и бровями, использовать руки и ноги.

Система передвижения

Советский Луноход-1

Для передвижения по открытой местности чаще всего используют колёсную или гусеничную, реже - шагающую систему передвижения роботов. Это самые универсальные виды систем перемещения.

Робот на гусеничном ходу

Для неровных поверхностей создаются гибридные конструкции, сочетающие колёсный или гусеничный ход со сложной кинематикой движения колёс. Такая конструкция была применена в луноходе .

Внутри помещений, на промышленных объектах используются передвижения вдоль монорельсов , по напольной колее и т. д. Для перемещения по наклонным, вертикальным плоскостям используются системы, аналогичные «шагающим» конструкциям, но с вакуумными присосками.

Робот « BigDog » (внешне похожий на кентавра и разработанный для помощи в переноске грузов), демонстрирует достаточно эффективную походку на четырех ногах, включая удержание равновесия после бокового неожиданного воздействия (пинка).

Известный робот Asimo ходит на двух конечностях, подобно человеку. Так же известны роботы, подражающие движениям живых организмов.

Технология подзарядки

Разработаны технологии, позволяющие роботам самостоятельно осуществлять подзарядку, находя и подсоединяясь к стационарной зарядной станции.

Математическая база

Помимо уже широко применяющихся нейросетевых технологий, существуют алгоритмы самообучения взаимодействию робота с окружающими предметами в реальном трехмерном мире: робот-собака Aibo (использованный как механическое устройство) под управлением таких алгоритмов прошел те же стадии обучения, что и новорожденный младенец - самостоятельно научившись координировать движения своих конечностей и взаимодействовать с окружающими предметами. Это дает ещё один пример математического понимания алгоритмов работы высшей нервной деятельности человека.

Глава 2. Опытно – экспериментальное исследование создания робота

Я попробовал сделать робота. Использовал одну микросхему драйвера моторов и два фотоэлемента. В зависимости от способа соединения моторов, микросхемы и фотоэлементов мой робот будет двигаться на свет или, наоборот, прятаться в темноту, бежать вперед в поисках света или пятиться, как крот, назад.

Принцип поведения робота основывается на "фоторецепции". В живой природе, которой будет подражать наш робот, фоторецепция - одно из основных фотобиологических явлений, в котором свет выступает как источник информации.
Устройство робота, двигающегося вперед, когда на него падает луч света, и останавливающегося, когда свет перестает его освещать - называется фотокинезисом - ненаправленным увеличением или уменьшением подвижности в ответ на изменения уровня освещённости.
В устройстве робота, кроме микросхемы драйвера моторов L293D , будет использоваться только один фотоэлемент и один электромотор. В качестве фотоэлемента можно применить не только фототранзистор.

Заключение

В качестве научного открытия мы возможно должны считать робот как продукт многовековой эволюции человеческой мысли всего человечества.
Трудно недооценить смысла созданного робота для техники. Ведь изобретение робота сильно изменило всю отрасль. Это значимое событие в истории техники. История создания робота покрыта тайнами. И даже то, что в наличии большое количество свидетельств, трудно достоверно узнать достоверное время появления первого робота.

Анализируя изобретение робота, мы можем считать, что научная база, основа изобретения робота, к этому времени уже была создана. Робот не так легко был изобретен, таким как мы привыкли к нему. Множество людей билось над изобретением робота. В течение длительного времени люди заимствовали друг у друга те или иные черты робота.

Проведя исследование, я сделал выводы, что роботы не способны заменить человека. Но они могут избавить людей от тяжелой и скучной работы.

Список источников

  1. Космонавтика. Малая энциклопедия. Гл. редактор В. П. Глушко. М.: Советская энциклопедия, 1970. 527c.

2. Энциклопедия Космонавтика. Гл. ред. В. П. Глушко. М.: Советская энциклопедия, 1985. 526c.

3. Дитрих А.К. Почемучка. – М.:АСТ, 2004, 335с.

4. Что? Зачем? Почему? Большая книга вопросов и ответов.- М.:Эксмо, 2002, 512с.

5. Я познаю мир: Детская энциклопедия.: Изобретения._ М.: АСТ, 1999, 512с.

6. Я познаю мир: Детская энциклопедия: История вещей. – М.:АСТ, 1998, 512с. Слайд 2

Задачи исследования: - изучить литературу по теме «Роботы»; - узнать об истории изобретения роботов; - провести опыты по изучению работы роботов. Методы: - теоретический анализ различных источников информации; - постановка опытов; - обработка материалов эксперимента; - наблюдение; - анализ.

Ро́бот - аппарат, способный самостоятельно взаимодействовать с внешним миром и обладающий искусственным интеллектом или его зачатками.

Кто первый создал механического человека? 1540 год - итальянец Джанелло Делла Торре

Промышленные роботы

Бытовые роботы

Военные роботы

Для передвижения используют колёсную или гусеничную, реже - шагающую систему передвижения роботов.

ТЕХНОЛОГИЯ ПОДЗАРЯДКИ

ВЫВОД: Проведя исследование, я сделал выводы, что роботы не способны заменить человека. Но они могут избавить людей от тяжелой и скучной работы.

Список источников 1. Космонавтика. Малая энциклопедия. Гл. редактор В. П. Глушко. М.: Советская энциклопедия, 1970. 527c. 2. Энциклопедия Космонавтика. Гл. ред. В. П. Глушко. М.: Советская энциклопедия, 1985. 526c. 3. Дитрих А.К. Почемучка. – М.:АСТ, 2004, 335с. 4. Что? Зачем? Почему? Большая книга вопросов и ответов.- М.:Эксмо, 2002, 512с. 5. Я познаю мир: Детская энциклопедия.: Изобретения._ М.: АСТ, 1999, 512с. 6. Я познаю мир: Детская энциклопедия: История вещей. – М.:АСТ, 1998, 512с. 7. Я познаю мир: Детская энциклопедия: Физика\Сост. А.А. Леонович. – М.:АСТ, 1996, 480 с. 8. http://www.e-blog.com.ua/8854/

СПАСИБО ЗА ВНИМАНИЕ



Рекомендуем почитать

Наверх