Data Service
Tecgraf PUC-Rio
maio de 2011
Motivação
• Aplicações científicas tem como
característica a elevada complexidade de
seus dados e dos algoritmos que os
manipulam
• representação complexa
• grande volume de dados
• Necessidade de compartilhamento de dados
entre as aplicações
Data Service
• Oferece um conjunto de funcionalidades para
acesso e manipulação dos dados
armazenados em Provedores de Dados
(data sources).
• Flexível para atender às diferentes
características dos servidores de dados e às
diferentes necessidades dos clientes.
• Aplicações se integram de maneira uniforme
a diferentes provedores de dados, com
apenas uma implementação
Princípios básicos
• Representação dos dados de forma estruturada
• os dados podem ser representados da forma mais
adequada para as aplicações
• navegação x armazenamento
• Diferentes visões sobre os dados
• um mesmo dado pode oferecer diferentes visões
• Navegação hierárquica
• a navegação é feita de forma hierárquica
• Navegação por descritores (meta-informações)
• a navegação não é feita sobre o próprio dado, mas
sobre uma hierarquia de descritores
O Serviço de Dados
• Define os tipos e as facetas para navegação
hierárquica pelos dados oferecidos.
module tecgraf {
module openbus {
/** * \brief Módulo do Serviço de Dados Estruturados. */
module data_service {
...
}; // data_service
}; // openbus
}; // tecgraf
Descritores dos Dados
• A navegação pelos dados é feita usando
descritores que possuem meta-informação
sobre os dados
•
•
•
•
descrição dos dados representados
indica quais as visões o dado representado oferece
a aplicação usa apenas a visão que lhe interessa
possui uma chave que identifica univocamente o
dado representado
• É utilizada no descritor e nas visões como identificador
• Pode ser persistida
Descritores dos Dados
valuetype DataDescription {
/** A chave unívoca do dado. */
public DataKey fKey;
/** O nome simbólico do dado. */
public string fName;
/** As visões oferecidas pelo dado. */
public StringSeq fViews;
/** Metadados (opcionais) do dado. */
public MetadataSeq fMetadata;
};
• A navegação hierárquica é feita sobre descritores dos
dados.
• O descritor deve ter informações suficientes para que
um determinado dado seja identificado.
Descritores dos Dados
valuetype DataDescription {
/** A chave unívoca do dado. */
public DataKey fKey;
/** O nome simbólico do dado. */
public string fName;
/** As visões oferecidas pelo dado. */
public StringSeq fViews;
/** Metadados (opcionais) do dado. */
public MetadataSeq fMetadata;
};
typedef sequence<octet> OctetSeq;
typedef OctetSeq DataKey;
• A chave fKey é criada pelo serviço
• Identificador unívoco
• Identifica, além do dado em si, o serviço do qual o
dado se originou.
Descritores dos Dados
valuetype DataDescription {
/** A chave unívoca do dado. */
public DataKey fKey;
/** O nome simbólico do dado. */
public string fName;
/** As visões oferecidas pelo dado. */
public StringSeq fViews;
/** Metadados (opcionais) do dado. */
public MetadataSeq fMetadata;
};
• O campo fName possui um nome simbólico para o
dado.
Descritores dos Dados
valuetype DataDescription {
/** A chave unívoca do dado. */
public DataKey fKey;
/** O nome simbólico do dado. */
public string fName;
/** As visões oferecidas pelo dado. */
public StringSeq fViews;
/** Metadados (opcionais) do dado. */
public MetadataSeq fMetadata;
};
• O campo fViews possui a lista das visões que o dado
possui.
• Tipicamente utiliza-se o repository ID como
identificador da visão.
Descritores dos Dados
valuetype DataDescription {
/** A chave unívoca do dado. */
public DataKey fKey;
/** O nome simbólico do dado. */
public string fName;
/** As visões oferecidas pelo dado. */
public StringSeq fViews;
/** Metadados (opcionais) do dado. */
public MetadataSeq fMetadata;
};
struct Metadata {
string fName; /**< \brief O nome. */
any fValue; /**< \brief O valor. */
};
typedef sequence<Metadata> MetadataSeq;
• O campo fMetadata permite qualquer informação
adicional
• Par nome e valor onde o valor pode ser de qualquer
tipo básico (any).
Visão do Dado
• É um conjunto de atributos e operações que
apresentam o dado de acordo com um domínio ou
uma necessidade específica.
• Os servidores de dados implementam suas próprias
visões.
• Uma visão é sobre um dado em particular.
• Do ponto de vista do cliente, a visão é o dado.
abstract interface DataView {
/** Obtém o identificador unívoco do dado. */
DataKey getKey()
/** Obtém o nome da interface. Deve-se utilizar o
* "Repository ID" como retorno. */
string getInterfaceName();
};
Visão do Dado
• O DataService já define uma visão para
dados não estruturados.
• Com essa visão é possível transferir dados
locais para o data source através de socket
/** Visão não-estruturada de um dado para a transferência de
seu conteúdo através de um socket. */
valuetype UnstructuredData supports DataView {
public DataKey fKey; /* O identificador unívoco do dado. */
public string fHost; /* O nome do host de origem do dado. */
public unsigned long fPort; /* A porta do host de origem */
public OctetSeq fAccessKey; /* A chave de acesso ao dado. */
public boolean fWritable; /* Se é possível alterar o dado */
};
Exemplo de transferência de dado
usando a visão não estruturada
A biblioteca FTC implementa abstrações para
transferência de dados por socket.
byte[] data = ...;
UnstructuredData view =
(UnstructuredData) dataService.getDataView(fileKey,
UnstructuredDataHelper.id());
DataKey dataKey = new DataKey(view.fKey);
RemoteFileChannel rfc = new RemoteFileChannelImpl(
dataKey.getDataId().getBytes(Utils.CHARSET_ENCODING),
view.fWritable, view.fHost, view.fPort,
view.fAccessKey);
rfc.open(false);
rfc.write(data);
rfc.close();
Facetas definidas pelo Serviço de
Dados
• IHierarchicalNavigationDataService
• responsável pela navegação pelos dados
• IHierarchicalManagementDataService
• responsável pela criação, atualização e remoção
de dados, no próprio data source.
• IHierarchicalTransferDataService
• responsável pela transferência de dados entre
data sources diferentes.
• IHierarchicalDataService
• interface de conveniência que herda todas as
funcionalidades das outras três
IHierarchicalNavigationDataService
IHierarchicalNavigationDataService
• O método getRoots obtém os descritores dos
dados que representam as raízes da hierarquia.
• É utilizado pelas aplicações que utilizam o serviço
para iniciar a navegação nos dados.
• Pode lançar as exceções:
• ServiceFailure caso ocorra uma falha na operação.
• DataAccessDenied caso o usuário não tenha permissão
de acesso.
DataDescriptionSeq getRoots()
raises (ServiceFailure, DataAccessDenied);
IHierarchicalNavigationDataService
• O método getChildren obtém os descritores dos
dados descendentes de um determinado dado.
• O parâmetro de entrada é a chave do dado que se
deseja os descendentes.
• Pode lançar as exceções:
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão de
acesso
DataDescriptionSeq getChildren(in DataKey fKey)
raises (ServiceFailure, InvalidDataKey, DataNotFound,
DataAccessDenied);
IHierarchicalNavigationDataService
• O método getParent obtém o descritor dos
ascendente de um determinado dado.
• O parâmetro de entrada é a chave do dado que se
deseja o ascendente.
• Pode lançar as exceções:
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão de
acesso
DataDescription getParent(in DataKey fKey) raises
(ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied
IHierarchicalNavigationDataService
• O método getDataDescription obtém o
descritor de um determinado dado.
• O parâmetro de entrada é a chave do dado que se
deseja o descritor.
• Pode lançar as exceções:
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
de acesso
DataDescription getDataDescription(in DataKey fKey) raises
(ServiceFailure, InvalidDataKey, DataNotFound,
DataAccessDenied);
IHierarchicalNavigationDataService
• O método getDataView obtém uma visão de um dado.
• Os parâmetros de entrada são a chave do dado e o nome
da visão desejada.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
UnknownViewInterface uma visão desconhecida foi solicitada
DataAccessDenied caso o usuário não tenha permissão
DataView getDataView(in DataKey fKey, in string fViewInterface)
raises (ServiceFailure, InvalidDataKey, DataNotFound,
UnknownViewInterface, DataAccessDenied);
IHierarchicalNavigationDataService
• O método getDataViewSeq obtém um conjunto de
visões para um conjunto de dados. As visões retornadas
implementam a mesma interface.
• Os parâmetros são as chaves dos dados e o nome da visão
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
UnknownViewInterface uma visão desconhecida foi solicitada
DataAccessDenied caso o usuário não tenha permissão
DataViewSeq getDataViewSeq(in DataKeySeq fKeys,
in string fViewInterface)
raises (ServiceFailure, InvalidDataKey, DataNotFound,
UnknownViewInterface, DataAccessDenied);
IHierarchicalManagementDataService
IHierarchicalManagementDataService
• O método createData cria um dado a partir de
informações contidas em um descritor protótipo.
• Nem todos os campos precisam estar presentes na
descrição do dado (ex: o campo dataKey)
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
InvalidPrototype caso o protótipo seja inválido
DataAccessDenied caso o usuário não tenha permissão
DataKey createData(in DataKey fPrototype,
in DataDescription fParentKey)
raises (ServiceFailure, InvalidDataKey, DataNotFound,
InvalidPrototype,
DataAccessDenied)
IHierarchicalManagementDataService
• O método copyData copia um dado para uma
determinada localização.
• Recebe como parâmetros a chave do dado de origem e a
chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
UnknownViews o dado não possua visões para o novo dado.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
DataKey copyData(in DataKey fSourceKey, in DataKey fParentKey)
raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound,
DataAccessDenied);
IHierarchicalManagementDataService
• O método moveData move um dado para uma
determinada localização.
• Recebe como parâmetros a chave do dado de origem e a
chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
UnknownViews o dado não possua visões para o novo dado.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
void moveData(in DataKey fKey, in DataKey fNewParentKey)
raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound,
DataAccessDenied);
IHierarchicalManagementDataService
• O método updateData atualiza um dado a partir do
conteúdo de um outro dado qualquer.
• Recebe como parâmetros a chave do dado que se deseja
atualizar e a chave do dado de origem.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
UnknownViews o dado não possua visões para o novo dado.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
void updateData(in DataKey fKey, in DataKey fSourceKey)
raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound,
DataAccessDenied);
IHierarchicalManagementDataService
• O método deleteData remove um dado.
• Recebe como parâmetro a chave do dado que se deseja
remover.
• Pode lançar as exceções:
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
void deleteData(in DataKey fKey)
raises (ServiceFailure, InvalidDataKey,
DataNotFound,DataAccessDenied);
IHierarchicalTransferDataService
IHierarchicalTransferDataService
• O método copyDataFrom copia um dado proveniente de
outro data source para uma determinada localização.
• Recebe como parâmetros a chave do dado de origem e a
chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
UnknownViews o dado não possua visões para o novo dado.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
DataKey copyDataFrom(in DataKey fSourceKey, in DataKey fParentKey)
raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound,
DataAccessDenied)
IHierarchicalTransferDataService
• O método updateDataFrom atualiza um dado a partir do
conteúdo de um dado proveniente de outro data source.
• Recebe como parâmetros a chave do dado que se deseja
atualizar e a chave do dado de origem.
• Pode lançar as exceções:
•
•
•
•
•
ServiceFailure caso ocorra uma falha na operação.
UnknownViews o dado não possua visões para o novo dado.
InvalidDataKey caso a chave do dado não seja válida.
DataNotFound caso o dado não seja encontrado.
DataAccessDenied caso o usuário não tenha permissão
void updateDataFrom(in DataKey fKey, in DataKey fSourceKey)
raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound,
DataAccessDenied);
Download

Descritores dos Dados