Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы_часть2.doc
Скачиваний:
8
Добавлен:
22.04.2019
Размер:
12 Мб
Скачать
☆

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.