2009-10-instalando-mongodb-driver-php-en-ubuntu-9-04

¿Qué es mongoDB?

Es una base de datos orientada a documentos de código abierto escrita en C++. A diferencia de otros sistemas de gestión de bases de datos, mongoDB no sigue el modelo relacional. La base de datos gestiona colecciones de documentos en objetos JSON. Está orientada a la web 2.0, la nube y las configuraciones de varios servidores de bases de datos. En la entrada Más allá de las bases de datos relacionales hablamos de la utilidad de este tipo de bases de datos.

Más información:

Descargando e instalando mongoDB

Existen dos formas de realizar este proceso: podemos descargar el código fuente y compilarlo o bajar directamente los binarios. En este artículo optaremos por lo segundo por la facilidad y comodidad.

En la sección de descargas de la web de mongodb tenemos varias opciones, aunque las que nos interesa es la correspondiente a la versión 1.0.0 para Linux 32 bits (el que use 64 bits deberá escoger su opción). Tras la descarga, tendremos un archivo tar.gz que descomprimiremos con los comandos habituales:

cd Escritorio
tar -zxvf mongodb-linux-i686-1.0.0.tgz
cd mongodb-linux-i686-1.0.0

Si observamos el contenido del directorio vemos que se organiza en los subdirectorios bin, include y lib. En principio ya podríamos ejecutar mongodb desde ese directorio, pero por cuestiones de orden y claridad, copiaremos el contenido de esas subcarpetas en los directorios de igual nombre bajo /usr/local, operación para la que necesitamos adquirir permisos de root.

sudo -s
mv bin/* /usr/local/bin
mv include/* /usr/local/include
mv lib/* /usr/local/lib

De aquí en adelante asumiremos que estamos logueados en la terminal como root. Como ya tenemos los archivos donde nos interesan, podemos eliminar la carpeta descomprimida y el archivo descargado:

cd ../
rm -fr mongodb-linux-i686-1.0.0 mongodb-linux-i686-1.0.0.tgz

Configuración inicial

Antes de iniciar el demonio de mongodb es necesario crear una serie de directorios de trabajo, ya que al no instalarse, estos directorios no se crean. El más fundamental será el directorio donde el gestor almacenará las estructuras necesarias para almacenar en el disco duro los datos. Por defecto la carpeta es /data/db pero en este tutorial guardaremos los datos bajo /var/lib/mongodb (mysql por ejemplo también guarda los datos bajo /var/lib). Para ello creamos el directorio:

mkdir /var/lib/mongodb

Este directorio es propiedad de root. En este tutorial el demonio mongod se ejecutará bajo el usuario root. Podríamos ejecutarlo bajo otro usuario existente o crear uno específico para ello, tras lo que podríamos cambiar la propiedad del directorio de los datos por la del usuario usado por mongod.

El demonio puede configurarse mediante una serie de parámetros (ejecutar mongod –help para una lista) pasados al ejecutable del demonio, pero esta forma es un poco sucia y puede exponer ciertas configuraciones a la vista de cualquier usuario del sistema que explore la lista de procesos. Por ello, mongodb permite ser llamado especificándole la ruta a un archivo de configuración (de tipo conf). Ya que existe esa posibilidad, nosotros la vamos a hacer de esa forma. Para ello creamos un directorio bajo /etc llamado mongodb:

mkdir /etc/mongodb

Y con cualquier editor creamos el archivo mongodb.conf y le asignamos el contenido:

nano /etc/mongodb/mongodb.conf
# Config file for MongoDB

dbpath = /var/lib/mongodb

Como puede observarse, la directiva de configuración dbpath (que podía fijarse como parámetro del demonio) se usa de forma análoga en el archivo de configuración, especificándole a la aplicación dónde se encuentra el directorio con los datos. Existen directivas que no reciben argumentos, por ejemplo –auth no requiere nada a continuación. En estos casos, en el archivo de configuración deberemos igualarlo a true. Continuando con el ejemplo, –auth quedaría como auth = true. Por el momento no usaremos más directivas. En la web oficial existe un apartado dedicado a cada parámetro que podemos usar para configurar mongodb.

Iniciando el demonio

Para ejecutar el demonio escribiremos (le indicamos la ruta al archivo de configuración con -f):

mongod -f /etc/mongodb/mongodb.conf

Y si todo va bien, obtendremos algo como esto:

Tue Oct 13 21:47:02 Mongo DB : starting : pid = 16139 port = 27017 dbpath = /var/lib/mongodb master = 0 slave = 0  32-bit 

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Tue Oct 13 21:47:02 db version v1.0.0, pdfile version 4.4
Tue Oct 13 21:47:02 git version: afe21e02c11f9a923ab1c95edf6fdd95b9a4a51e
Tue Oct 13 21:47:02 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686
Tue Oct 13 21:47:02 waiting for connections on port 27017
Tue Oct 13 21:47:02 web admin interface listening on port 28017

Tras esta operación ya tenemos al demonio listo para atender nuestras peticiones.

Instalar el driver para PHP

Para poder instalar el driver de mongodb para php debemos tener instalado el paquete PEAR y la versión de desarrollo de php. Si no lo tenemos instalado, sólo tenemos que ejecutar:

apt-get install php-pear php5-dev

Y para instalar el driver:

pecl install mongo

Configurar PHP

El siguiente paso y último de la instalación y configuración consiste en indicarle a php que debe cargar la nueva extensión que contiene el driver en sí. Para ello creamos el siguiente archivo:

nano /etc/php5/conf.d/mongodb.ini

Y le asignamos la carga del módulo y sus directivas de configuración:

extension=mongo.so

[mongo]
; If the driver should reconnect to mongo
mongo.auto_reconnect = true

; Whether to allow persistent connections
mongo.allow_persistent = On

; Maximum number of persistent connections (-1 means unlimited)
mongo.max_persistent = -1

; Maximum number of links (persistent and non-persistent, -1 means unlimited)
mongo.max_connections = -1

; Default host for mongo connection
mongo.default_host = www.example.com

; Default port for mongo database
mongo.default_port = 42

; When saving files to the database, size of chunks to split them into
mongo.chunk_size = 1024

; Specify an alternate character to $ to use for special db functions ($set, $push, $exists, etc.)
mongo.cmd = "$"

Tras esta operación debemos reiniciar Apache para que PHP cargue de nuevo la configuración y los módulos (sólo si trabajamos con mod_php).

/etc/init.d/apache2 restart

Razones para usar SqLite en 2016

sqlite

Fácil de manejar

Hay unas cuantas cosas que hay que entender para poder garantizar que el servidor de base de datos está configurado correctamente (buffers compartidos, tamaño efectivo caché, mem trabajo, mem trabajos de mantenimiento, tampones wal …). La actualización puede ser un proceso de miedo. Y además, ¿sabes dónde está su base de datos? ¿Puede señalar algún lugar y decir: “ese es mi base de datos”?

Quiero destacar la diferencia entre la gestión de un SQLite db en comparación con un servidor de base típica.

SQLite es fácil de manejar – es un solo archivo (o en algunos momentos un archivo + de registro de transacciones). El formato de archivo es estable a través de versiones principales, por lo que si tuviera un archivo de base de datos SQLite desde la versión 3.0.0 (en 2004), podría leerlo utilizando la última SQLite 3.10.0. Si quiero tener el archivo de base de datos conmigo en una unidad flash, copia el archivo, o mejor aún guardo en mi carpeta de Dropbox. Si quiero compartir algunos análisis de datos que estoy haciendo con un compañero de trabajo, sólo puede enviar una copia del archivo de base y están listos. Tener la base de datos en un único archivo con un formato estable es una característica.

SQLite es muy fácil de configurar. Las características SQLite son manejadas de dos maneras: banderas de compilación y declaraciones PRAGMA (configuración en tiempo de ejecución).

SQLite es desarrollado activamente por algunos ingenieros de software realmente sorprendentes. Las nuevas características de alta calidad se añaden a un ritmo impresionante. Recientemente SQLite añadió soporte para datos JSON a través de la extensión json1. SQLite también lanzó una versión mejorada de la extensión de búsqueda de texto completo, que incluye como resultado la clasificación utilizando el algoritmo BM25.

SQLite ahora funciona dos veces más rápido que la versión 3.8.0 y tres veces más rápido que la versión 3.3.9

A pesar de todos estos cambios y mejoras, SQLite raramente presenta errores. El conjunto de pruebas SQLite es ampliamente considerado como uno de los mejores en la industria.

Extensible y hackeable

Mi característica favorita de SQLite es su extensibilidad. Debido SQLite está integrado por su aplicación, que se ejecuta en el mismo espacio de direcciones y puede ejecutar código de la aplicación en su nombre. Tanto el conductor Python biblioteca SQLite estándar, pysqlite, y el conductor alternativo proporcionan APSW APIs para la definición de las funciones de encargo SQL, funciones de agregado, y colaciones. APSW va un paso más allá y ofrece APIs para definir tablas virtuales y sistemas de archivos virtuales!

La velocidad del rayo

SQLite es muy rápido. Se ejecuta en la misma máquina, lo que no hay sobrecarga de red al ejecutar consultas o la lectura de los resultados. Se ejecuta en el mismo espacio de direcciones, por lo que no existe un protocolo de alambre.

Modo WAL

La versión 3.7.0 de SQLite añadió un nuevo método de diario que utiliza un registro de escritura anticipada. Por sí mismo esto no es realmente una excelente noticia, pero lo que significa para los desarrolladores de aplicaciones Web (o cualquiera que se relacione con la concurrencia) es que los lectores ya no bloquean a los escritores, y viceversa. O, para decirlo de otro modo, la lectura y escritura puede producirse tanto simultaneamente.

 

database-sqlite

Como usar fsck en Linux desde el terminal

repair-console

El mandato fsck es una indispensable herramienta para verificación y reparación de sistemas de archivos dañados. A continuación hago un resumen de los usos más comunes de fsck.

La verificación de cualquier partición del disco duro requiere, necesariamente, desmontar antes ésta. Utilizar el mandato fsck en una partición montada, puede ocasionar la pérdida o corrupción de datos. Una vez desmontada la partición a verificar, es posible realizar una verificación y/o reparación utilizando cualquiera de los siguientes ejemplos de uso del mandato fsck.

Forzar la verificación del sistema de archivos, responder automáticamente con «Si» (opción -y) a la reparación de cualquier problema que requiera intervención humana (opción -y) y mostrando una barra de progreso (opción -C).

fsck -fyC /dev/sdXX
Forzar la verificación del sistema de archivos y responder automáticamente con «Si» (opción -y) a la reparación de cualquier problema que requiera intervención humana (opción -y).

fsck -fy /dev/sdXX
Lo mismo que el mandato anterior, pero además con verificación de solo-lectura para buscar bloques dañados (opción -c), preservando la lista de bloques dañados existente donde se añadirán nuevos bloques dañados a ésta (opción -k).

fsck -fykc /dev/sdXX
Lo mismo que el mandato anterior, pero con verificación de lectura-escritura no-destructiva para buscar bloques dañados (opción -cc), preservando la lista de bloques dañados existente donde se añadirán nuevos bloques dañados a ésta (opción -k). Sí se encuentra un bloque dañado, este se añade al inodo de bloques dañados.

Optimizar tu MySQL

query_cache_size:
MySQL 4 proporciona una característica que puede resultar muy útil – una caché de consultas. En una situación en la base de datos tiene que ejecutar varias veces las mismas preguntas en el mismo conjunto de datos, devolviendo el mismo resultado cada vez, MySQL puede cachear resultados, evitando la sobrecarga de ejecución a través de los datos una y otra y es extremadamente útil en servidores con mucha carga.

key_buffer_size:
El valor de key_buffer_size es el tamaño del búfer utilizado con los índices. Cuanto mayor sea el buffer, más rápido terminará el comando SQL y el resultado será devuelto. Se supone que lo mejor es ajustar el key_buffer_size con al menos un cuarto de la memoria del servidor, pero no más de la mitad de la cantidad total. Idealmente, será lo suficientemente grande como para contener todos los índices (el tamaño total de todos los archivos. MYI en el servidor).

table_cache:
El valor predeterminado es 64. Cada vez que MySQL tiene acceso a una tabla, se coloca en la caché. Si el sistema accede a muchas tablas, es más rápido para tener estas en la caché. MySQL al ser multi-threaded, puede ejecutar muchas consultas sobre sobre una tabla a la vez, y cada uno de éstas abrirá una tabla.

sort_buffer:
El sort_buffer es muy útil para acelerar las operaciones de myisamchk (razón por la cual se fija mucho más alto para ese fin en los archivos de configuración por defecto), pero también puede ser útil cuando se realizan todos los días un gran número de ordenaciones o clasificaciones.

thread_cache:
Si se tiene un servidor con mucha carga que está recibiendo una gran cantidad de conexiones rápida, hay que configurar la thread_cache lo suficientemente alto para que el valor d threads_created en SHOW STATUS deja de aumentar. Esto debe tomar parte de la carga fuera de la CPU.

tmp_table_size:
(no incluido en el archivo de configuracion, pero este parámetro también se puede configurar).”Created_tmp_disk_tables” son el número de tablas temporales implícitos en el disco creado durante la ejecución declaraciones y “Created_tmp_tables” están basados en memoria. Obviamente, es malo si tiene que ir a la disco en lugar de la memoria todo el tiempo.

wordpress_mysql_backup