- •2.1 Двенадцать правил Дейта, которым должна соответствовать рсубд.
- •2.2 Индексированные переменные.
- •2.3 Использование многомерных структур для хранения данных.
- •2.4 Многомерные структуры данных. Навигация в многомерных структурах данных.
- •2.5 Преимущества и недостатки распределенных субд.
- •2.6 Распределенные базы данных. Определение. Отличие между рбд и средствами распределенной обработки.
- •2.7 Распределенные субд. Однородные и разнородные рсубд.
- •2.8 Репликация данных в рбд.
- •2.9 Фрагментация данных в рбд.
- •2.10 Хранение объектов в многомерных структурах с учетом наследования и индексов.
- •2.11Архитектура субд hBase
- •2.12 Добавление и удаление записей в субд hBase
- •2.13 Извлечение одиночных записей в субд Hbase
- •2.14 Операция Scan в субд Hbase
- •2.15 Использование фильтров при извлечении данных в субд Hbase
- •2.16 Счетчики в субд Hbase
- •2.17 Создание таблицы в субд Hbase
- •2.18 Схема данных в субд Hbase
- •2.19 Операции Put и Get в пакетном режиме
- •2.20 Компоненты кластера субд Hbase
2.10 Хранение объектов в многомерных структурах с учетом наследования и индексов.
Каждый хранимый класс, который использует класс %CacheStorage, может сохранять свои экземпляры внутри базы данных, используя один или несколько узлов многомерных данных (глобалей). При создании класса компилятором класса автоматически 8 создаются определения двух глобалей: глобали данных и индексной глобали. При этом справедливо следующее:
• Данные сохраняются в глобале, имя которого начинается с полного имени класса, т.е. пакет.класс, при этом справа к имени глобала данных добавляется буква “D”, к имени глобала индекса добавляется буква “I”.
• Данные каждого экземпляра сохраняются внутри единственного узла глобала
данных, при этом значения свойств размещаются в списковых структурах.
• Каждый узел глобала данных имеет объектный идентификатор ID. По умолчанию, значения ID это целые числа, значения которых обеспечиваются вызовом функции $Increment.
При этом для работы с объектами можно использовать либо объектный доступ, либо
чрезвычайно эффективный прямой доступ с помощью глобалей.
Механизм IDKEY
С помощью механизма IDKEY можно задать значение объектного ID, основываясь на значениях свойств объекта. Для этого, к определению класса добавляется определение индекса IDKEY и задаются свойство или свойства, которые обеспечивают значение ID. Заметим, что после сохранения объекта, его объектный ID не может быть изменен. Это означает, что после сохранения объекта, использующего механизм IDKEY, нельзя изменять те его свойства, на которых базируется ID. Этот механизм позволяет задать значение объектного идентификатора, основываясь на значениях свойств объекта. При этом свойства, которые участвуют в объектном идентификаторе, НЕ могут изменяться. Эти свойства должны однозначно идентифицировать объект.
Class MyApp.Person Extends %Persistant {
Property Name As %String
Property Age As %Integer
Index IDKEY On Name [Idkey]}
2.11Архитектура субд hBase
Client использует систему Zookeeper, чтобы определить какой сервер является мастером. CF – column family
Для небольших кластеров возможен следующий вариант установки
В больших системах:
2.12 Добавление и удаление записей в субд hBase
Добавление в HBase происходит атомарно для каждой строки. Используется механизм блокировки при котором чтение данных доступно даже если другие потоки записывают в эту строку. Если изменить строку пытаются несколько потоков одновременно, то только один сможет это сделать(остальные будут ожидать). В HBase можно добавлять как одну строку так и список строк.
Void put(List <Put> puts) throws IOException;
List <Put> puts = new ArrayList<Put>();
Put put1 = new Put(Bytes.toBytes(“row1”));
put1.add(Bytes.toBytes(“colFam”), Bytes.toBytes(“qual”), Bytes.toBytes(“val1”));
Put put2 = new Put(Bytes.toBytes(“row2”));
put1.add(Bytes.toBytes(“colFam”), Bytes.toBytes(“qual”), Bytes.toBytes(“val2”));
puts.add(put1);
puts.add(put2);
table.put(puts);
При вызове метода put могут вызываться следующие исключения:
NoSuchColumnFamilyException
IllegalArgumentException
Для добавления в таблицу кроме метода put может использоваться:
Boolean checkAndPut(byte[] row,byte[] family[],byte[] qualifier,byte[] value,Put put) throws IOException
Этот метод выполняет атомарную операцию проверки и установки значения
Сначала происходит проверка значения с указанными row,family,qualifier.
Удаление
Для удаления используется
Void delete(Delete delete) throws IOException
Delete(byte[] row);
deleteColumn()
deleteFamily() – удаляет все колонки указанной columnFamily
Также используется атомарная операция checkAndDelete.
