Manual do Hacker Especial | 77
armazenado anteriormente, acessando a
URL http://127.0.0.1:10018/riak/LXF/
test. Cada URL segue o padrão http://
SERVER:PORT/riak/BUCKET/KEY.
O comando a seguir retorna a lista de
buckets disponíveis:
$ curl -i ‘http://127.0.0.1:10018/
riak?buckets=true’
HTTP/1.1 200 OK
Vary: Accept-Encoding
Server: MochiWeb/1.1 WebMachine/1.10.5
(jokes are better explained)
Date: Fri, 19 Dec 2014 21:13:37 GMT
Content-Type: application/json
Content-Length: 33
{“buckets”:[“LXF”,”linuxformat”]}
O comando a seguir retorna a lista de
chaves em um bucket:
$ curl ‘http://127.0.0.1:10018/buckets/LXF/
keys?keys=true’
{“keys”:[“test2”,”test”,”test3”]}
Na maioria das vezes, você vai usar um
script escrito em uma linguagem de
programação para acessar um banco de
dados Riak. O comando a seguir é um scrip
Python que conecta o banco de dados Riak
que armazena e recupera um documento:
import riak
Connect to the cluster
client = riak.RiakClient(pb_port=10017,
protocol=’pbc’)
The name of the bucket
bucket = client.bucket(‘python’)
# “myData” is the name of the Key that will
be used
aRecord = bucket.new(‘myData’, data={
‘Name’: “Mihalis”,
‘Surname’: “Tsoukalos”
})
# Save the record
aRecord.store()
# Define the key for the record to retrieve
myRecord = bucket.get(‘myData’)
# Retrieve the record!
dictRecord = myRecord.data
# Now print it to see if all this actually
worked.
print dictRecord
$ python myRiak.py
{u’Surname’: u’Tsoukalos’, u’Name’:
u’Mihalis’}
O valor pb_port de 10017 está definido no
arquivo ./dev/dev1/etc/riak.conf usando o
parâmetro listener.protobuf.internal. Esta é
a porta Protocol Buffers que é usada para se
conectar ao Riak Cluster.
Em razão da flexibilidade na forma como o
banco de dados NoSQL armazena, insere,
consulta e atualiza dados é mais complexo do
que um banco de dados que usa SQL.
Gerando um cluster Riak
Criar e manipular clusters no Riak é
relativamente fácil com a ajuda do comando
riak-admin. Se você tentar adicionar um nó
que ainda não esteja sendo executado em
um cluster, haverá uma falha, com a seguinte
mensagem de erro:
$ dev/dev2/bin/riak-admin cluster join
[email protected]
Node is not running!
$ ./dev/dev2/bin/riak start
$ dev/dev2/bin/riak-admin cluster join
[email protected]
Success: staged join request for
‘[email protected]’ to ‘[email protected]’
$ dev/dev2/bin/riak-admin cluster join
[email protected]
Failed: This node is already a member of a
cluster
Da mesma forma, se tentar juntar um nó
a si mesmo, você receberá uma mensagem
de erro:
$ dev/dev1/bin/riak-admin cluster join
[email protected]
Failed: This node cannot join itself in a
cluster
O comando a seguir mostra os membros
de um cluster existente:
$ dev/dev2/bin/riak-admin status | grep
members
ring_members : [‘[email protected]’,’d
[email protected]’]
$ dev/dev1/bin/riak-admin status | grep
members
ring_members : [‘[email protected]’,’d
[email protected]’]
$ dev/dev3/bin/riak-admin status | grep
members
Node is not running!
Outro comando útil que mostra o status
dos nós é o seguinte:
$ ./dev/dev1/bin/riak-admin member-status
O status de junção é temporário e se
tornará válido quando todas as alterações
que estão aguardando na fila forem
aplicadas concomitantemente. Se você
deseja forçar as alterações, poderá executar
o comando riak-admin cluster commit. Se
executar o comando riak-admin member-
status novamente, você verá o status do nó
dev3, e o comando riak-admin cluster plan
exibirá as alterações que estão prestes a ser
realizadas.
Para que um nó deixe realmente um
cluster (veja box em páginas anteriores deste
capítulo), você deve primeiro revisar as
alterações por meio do comando
riak-admin cluster plan e, em seguida,
confirmá-lo com riak-admin cluster commit.
Até agora, você não terá visto nenhuma
segurança ao interagir com um banco de
dados Riak. No entanto, a Riak oferece
suporte a usuários e senhas. Você pode
encontrar mais informações de como o Riak
lida com autenticação e autorização no
endereço http://bit.ly/RiakDocsAuthz.
Um exemplo de MapReduce. Pode parecer
simplista, mas o MapReduce é uma técnica
poderosa. Tentar o mesmo com o SQL seria
extremamente difícil.
Consistência de dados
A consistência de dados em um banco de
dados é de suma importância. ACID
(Atomicity, Consistency, Isolation and
Durability) é um conjunto de propriedades
que garantem que as operações de banco
de dados funcionem de forma confiável.
“Atomicity” significa que quando você faz
algo para alterar o banco de dados, a
alteração pode funcionar ou falhar como
um todo. “Isolation” significa que, se outras
coisas estiverem sendo executadas ao
mesmo tempo nos mesmos dados, elas
não podem visualizar dados concluídos
pela metade. “Durability” se refere à
garantia de que, uma vez que o usuário
tenha sido notificado acerca do sucesso de
uma operação, então esta persistirá e não
será desfeita, mesmo que o harware ou
software falhe posteriormente.
Bancos de dados Graph executam as
operações ACID por padrão, o que é uma
coisa boa. Por outro lado, nem todos as
situações complicadas precisam estar em
“perfeita” conformidade com ACID.
MongoDB é compatível com ACID em
documentos de um único nível, mas não
oferece suporte a atualizações de
múltiplos documentos. Às vezes, você
pode estar OK com perda de operações ou
ter seu banco de dados temporariamente
inconsistente em detrimento da
velocidade. Você deve verificar
cuidadosamente as características de um
banco de dados NoSQL e decidir se ele se
serve para as suas necessidades. No
entanto, se a consistência dos dados é
absolutamente crítica, você sempre pode
implementá-la no código se não for
totalmente suportada pelo seu banco de
dados NoSQL. Tenha em mente que isso
pode não ser simples, especialmente em
ambientes distribuídos.
Grupo Unico PDF Passe@diante