No começo do ano, falei sobre
Python 3 e sua adequação para aprender lógica e programação. Hoje, vou falar sobre banco de dados e como integrá-lo com linguagens como o
Python.
MongoDB é um sistema de banco de dados multi-plataforma orientado a documentos, esboço livre. Como eu expliquei, isso significa que cada entrada ou registro pode ter um esquema de dados diferente, com atributos ou "colunas" que não precisam ser repetidos a partir de um registro para outro.
Ele é escrito em
C++, dando-lhe uma certa proximidade com os recursos de Hardware da máquina, por isso, ele é muito rápido para implementar tarefas. Também está licenciado como GNU AGPL 3.0, de modo que é um software de licença livre. Ele funciona em sistemas operacionais Windows,
GNU/Linux, OS X e Solaris.
As características de destaque do MongoDB, é a sua velocidade, seu rico e simplificado sistema de consulta para o conteúdo do banco de dados. Pode-se dizer que ele atinge um equilíbrio perfeito entre desempenho e funcionalidade, incorporando muitos dos tipos de consultas que nós usamos em nosso sistema de banco de dados relacional preferido, como MySQL e PostgreSQL mas sem sacrificar o desempenho.
No MongoDB cada registro, ou conjunto de dados, é chamado de documento. Os documentos podem ser agrupados em coleções, o que poderia dizer que são o equivalente de tabelas em um banco de dados relacional (apenas as coleções podem armazenar documentos com formatos muito diferentes, ao invés de estar sujeito a um esquema fixo).
Você pode criar índices para alguns atributos do documento, de modo que MongoDB manterá uma estrutura interna eficiente para o acesso à informação para os conteúdos desses atributos.
Os vários documentos são armazenados como BSON, ou Binary JSON, que é uma versão modificada do JSON, que permite buscas rápidas de dados. Para se ter uma ideia, BSON salva explicitamente os comprimentos dos campos, índices de matriz e outras informações úteis para os dados de digitalização.
É por isso que, em alguns casos, o mesmo documento em BSON ocupa um pouco mais de espaço do que o que seria necessário para ser armazenados diretamente em formato JSON. Mas, uma das ideias-chave em sistemas NoSQL, é que o armazenamento é barato e é melhor aproveitá-la, se você entra em um aumento significativo na velocidade de localizar informações em um documento.
No entanto, na prática, significa nunca ver o formato no qual os dados são armazenados verdadeiramente e sempre trabalhar em um documento em JSON, tanto a verificação de informações e loja.
Um exemplo de um documento no MongoDB, pode muito bem ser a seguinte:
mongo
Saída:
MongoDB shell version: 2.2.3
connecting to: test
>
use mytest
Saída:
switched to db mytest
> db.testcollection.insert({"message":"Hello, remote user!"})
> db.addUser('myuser', 'superpassword')
{ "n" : 0, "connectionId" : 2, "err" : null, "ok" : 1 }
{
"user" : "myuser",
"readOnly" : false,
"pwd" : "ecb2c08916b34e477c33c10cec2ae416",
"_id" : ObjectId("512c6d9dcc5d103a896944ae")
}
> db.testcollection.find()
{ "_id" : ObjectId("512c6d85cc5d103a896944ad"),
"message" : "Hello, remote user!"
}
Acima, resumimos as questões básicas, agora vamos à instalação no
Ubuntu 12.04:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update && sudo apt-get install mongodb-10gen
Depois de devidamente instalado, vamos às configurações:
nano /etc/mongodb.conf
Descomente:
auth = true
Comente:
#bind_ip = 127.0.0.1
sudo service mongodb stop
$ sudo service mongodb start
Instalando o Driver para conexão com o banco de dados, no caso o
PyMongo, no terminal GNU/Linux como root, digite:
Obs.: não feche o terminal depois dos comandos abaixo, nós vamos precisar dele para outras instalações.
# wget http://python-distribute.org/distribute_setup.py
# python distribute_setup.py
# easy_install pymongo
Com a linha acima, o PyMongo fica disponível para o Python que vem pré-instalado no GNU/Linux, para funcionar no
Python 3. Agora, para funcionar na versão ou numa superior, no terminal do GNU/Linux aberto anteriormente como root, ainda digite:
# python3.3 distribute_setup.py
# easy_install pymongo
# python3.3
O último comando deve retornar:
Python 3.3.2 (default, Sep 2 2013, 09:42:42)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Obs.: na linha de comando do Python 3.3 interativo, digite:
>>
import pymongo
Se ele pular a linha, beleza. Está tudo configurando perfeitamente. Se ele apresentar o erro, revisar os comandos anteriores.
O último teste é escrever um programa em Python para acessar a base de dados de teste do MongoDB. Agora, com o IDLE ou o
Geany, COPIE para um arquivo novo e salve com a extensão ".py":
# coding:utf8
#
# Teste de acesso ao MONGODB
#
import os
os.system("clear") # Limpando a tela
from pymongo import MongoClient
mongoserver_uri = "mongodb://myuser:superpassword@10.2.0.182:27017/mytest" ### OBS: O IP TEM QUE SER O DA MAQUINA COM O MONGODB ESTA INSTALADO
conection = MongoClient(host=mongoserver_uri)
db = conection['mytest']
collection = db['testcollection']
print (collection.find_one())
## --------- fim do arquivo:
Execute o programa. O resultado vai ser o mesmo do teste acima:
> {u'message': u'Hello, remote user!', u'_id':
ObjectId('5221030f0ba4e7a74ec82fe5')}