Tecgraf PUC-Rio
Setembro de 2013
Data Service
Motivação
• Aplicações científicas têm como característica a elevada complexidade de seus dados e dos algoritmos que as 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 às 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
• A navegação hierárquica é feita sobre descritores dos dados
• O descritor deve ter informações suficientes para que um determinado dado seja identificado
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
Descritores dos Dados
• 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
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
typedef sequence<octet> OctetSeq;typedef OctetSeq DataKey;
Descritores dos Dados
• O campo fName possui um nome simbólico para o dado
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
Descritores dos Dados
• O campo fDefaultView possui a visão padrão do dado
• Tipicamente utiliza-se o repository ID como identificador da visão
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
Descritores dos Dados
• O campo fOthersViews possui a lista das outras visões do dado
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
Descritores dos Dados
• O campo fMetadata permite qualquer informação adicional • Par nome e valor onde o valor pode ser de qualquer tipo básico
(any)
valuetype DataDescription { /** A chave unívoca do dado. */ DataKey fKey; /** O nome simbólico do dado. */ string fName; /** A visão padrão do dado (opcional). */ DefaultView fDefaultView; /** As outras visões oferecidas pelo dado, ou seja, as visões diferentes da visão padrão. */ StringSeq fOthersViews; /** Metadados (opcionais) do dado. */ MetadataSeq fMetadata;};
struct Metadata { string fName; /**< \brief O nome. */ any fValue; /**< \brief O valor. */};typedef sequence<Metadata> MetadataSeq;
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 existe sobre um dado em particular
• Do ponto de vista do cliente, a visão é o dadoabstract 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 de um dado por valor. */valuetype ValueTypeDataView supports DataView { public DataKey fKey; /* O identificador unívoco do dado */ };
/** Visão não-estruturada de um dado para a transferência de seu conteúdo através de um socket. */valuetype UnstructuredDataView : ValueTypeDataView { 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 (versão Java atual 1.4.0.1) implementa abstrações para transferência de dados por socket
ByteBuffer data = …; UnstructuredDataView view = (UnstructuredDataView) dataService.getDataView(fileKey, UnstructuredDataViewHelper.id()); RemoteDataChannel rdc = new RemoteDataChannel( view.fWritable, view.fHost, view.fPort, view.fAccessKey); rdc.open(); rdc.write(data); rdc.close();
Facetas definidas pelo Serviço de Dados
• IDataService• Permite a obteção de descrições e visões de
dados a partir de suas chaves unívocas
• IHierarchicalNavigationDataService• Permite a navegação pelos dados
• IHierarchicalManagementDataService• Permite a criação, atualização e remoção de
dados, no próprio data source
• IHierarchicalTransferDataService• Permite a transferência de dados entre data
sources diferentes
IDataService
IDataService
DataDescription getDataDescription(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied);
• 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
IDataService
DataView getDataView(in DataKey fKey, in string fViewInterface) raises (ServiceFailure, InvalidDataKey, DataNotFound, UnsupportedView, DataAccessDenied);
• 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
• UnsupportedView uma visão não suportada foi solicitada
• DataAccessDenied caso o usuário não tenha permissão
IDataService
DataViewSeq getDataViewSeq(in DataKeySeq fKeys, in string fViewInterface) raises (ServiceFailure, InvalidDataKey, DataNotFound, UnsupportedView, DataAccessDenied);
• 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
• UnsupportedView uma visão não suportada foi solicitada
• DataAccessDenied caso o usuário não tenha permissão
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 do 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
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• DataAlreadyExist caso o dado já exista• InvalidContainer caso o dado pai não possa conter dados• UnsupportedOperation caso a operação não seja implementada pelo serviço
DataKey createData(in DataKey fPrototype, in DataDescription fParentKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, InvalidPrototype, DataAccessDenied, DataAlreadyExist, InvalidContainer, UnsupportedOperation)
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• 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• DataAlreadyExist caso o dado já exista• InvalidContainer caso o dado pai não possa conter dados• UnsupportedOperation caso a operação não seja implementada pelo
serviço
DataKey copyData(in DataKey fSourceKey, in DataKey fParentKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied, DataAlreadyExist, InvalidContainer, UnsupportedOperation);
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• 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• DataAlreadyExist caso o dado já exista• InvalidContainer caso o dado pai não possa conter dados• UnsupportedOperation caso a operação não seja implementada pelo
serviço
void moveData(in DataKey fKey, in DataKey fNewParentKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied, DataAlreadyExist, InvalidContainer, UnsupportedOperation);
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• AbsentViews caso o dado de origem não possua visões conhecidas
para a atualizaçã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• UnsupportedOperation caso a operação não seja implementada pelo
serviço
void updateData(in DataKey fKey, in DataKey fSourceKey) raises (ServiceFailure, AbsentViews, InvalidDataKey, DataNotFound, DataAccessDenied, UnsupportedOperation);
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
• UnsupportedOperation caso a operação não seja implementada pelo serviço
void deleteData(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied, UnsupportedOperation);
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• 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• AbsentViews caso o dado de origem não possua visões conhecidas para a
atualização• UnavailableDataService caso o servidor de origem do dado não esteja disponível• DataAlreadyExist caso o dado já exista• InvalidContainer caso o dado pai não possa conter dados• UnsupportedOperation caso a operação não seja implementada pelo serviço
DataKey copyDataFrom(in DataKey fSourceKey, in DataKey fParentKey) raises (ServiceFailure, AbsentViews, InvalidDataKey, DataNotFound, DataAccessDenied, UnavailableDataService, DataAlreadyExist,
InvalidContainer, UnsupportedOperation)
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• AbsentViews caso o dado de origem não possua visões conhecidas
para a atualizaçã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• UnavailableDataService caso o servidor de origem do dado não esteja
disponível
void updateDataFrom(in DataKey fKey, in DataKey fSourceKey) raises (ServiceFailure, AbsentViews, InvalidDataKey, DataNotFound, DataAccessDenied, UnavailableDataService);
Top Related