Archivo por de la categoria 'PHP'

Introducción a las bases de datos NoSQL: MongoDB

Nov 09 2011 Autor: J.P Aulet under BBDD,Internet,PHP

NoSQL (del inglés ‘Not Only SQL‘) es una filosofía de sistemas de gestión de bases de datos que modifican por completo el modelo clásico de bases de datos relacionales (en inglés, RDBMS o ‘Relational Database Management System‘). Esta nueva forma de trabajar responde a otra forma de organización de los datos que permiten una menor rigidez de los datos y formas novedosas de trabajo. Las características comunes entre las implementaciones de bases de datos distribuidas no relacionales o NoSQL son las siguientes:

  • Consistencia: No se implementan mecanismos rígidos de consistencia como los presentes en las bases de datos relacionales, donde la confirmación de un cambio implica una comunicación del mismo a todos los nodos que lo repliquen. Las bases de datos NoSQL son ACID, esto significa que una transacción cumple lo siguiente:
    • Atomicidad: es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
    • Consistencia: es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.
    • Aislamiento: es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información sean independientes y no generen ningún tipo de error.
    • Durabilidad: es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.
  • Estructura distribuida: Generalmente se distribuyen los datos mediante mecanismos de tablas de hash distribuidas como las redes P2P.
  • Escalabilidad Horizontal: La implementación típica se realiza en muchos nodos de capacidad de procesado limitado, en vez de utilizar grandes ‘mainframes‘.
  • Tolerancia a fallos (debido a la estructura ACID), redundancia y sin cuellos de botella.

Existen diferentes tipos de bases de datos NoSQL, estos son los tipos principales:

  • Documentales (basadas en documentos): CouchDb, MongoDB y IBM Lotus.
  • Grafos: Neo4j y AllegroGraph
  • Clave-Valor: Cassandra, BigTable y Dynamo.
  • Tablulares: HBase y BigTable.

En nuestro caso nos centraremos en MongoDb.

MongoDB

La estructura principal y fundamental que debemos recordar es la siguiente (con el equivalente a una BBDD con filosofia SQL), ordenada jerárquicamente:

nosql databases Introducción a las bases de datos NoSQL: MongoDB

Bases de Datos NoSQL

- Server //Servidor
  - Database //Base de Datos
    - Collection (table)  //Tabla
       - Document (BSON; like a row)  //Fila
          - Fields (columns)  //Columna

.

Y las características principales a recordar son:
  • Las consultas son a nivel de ‘collection‘ (sin joins)
  • Los índices se generan en las ‘collection
  • Los documentos tienen una ID única
  • La ‘atomicidad’ es a nivel de ‘document‘.

MongoDB ofrece además una serie de métodos y herramientas novedosos para hacer consultas (querying) y operaciones de una forma muy senzilla y muy optimizado. Estos son:

Consultas:

• Permite consultas dinámicas (código JavaScript o objetos)
• 'Map/Reduce' (funciones JavaScript)
• Creación de indices secundarios (B-tree, R-tree, etc.)

Operaciones:

• Replicación
• Master/Slave
• Herramientas útiles: mongo shell, mongostat, mongo{dump,restore,export,import}

Ahora vamos a ver un ejemplo real de como trabajar en MongoDb, en nuestro caso explicaremos como trabajar con MongoDB con el lenguaje de programación PHP, que incluye esta base de datos como una librería nativa (PHP Mongo Native Driver).

La mayoria de frameworks por PHP soportan esta BBDD e incluyen librerias para trabajar con ella, aquí un listado:

CakePHP, Codeigniter, Doctrine, Drupal, Kohana, Lithium, Memcached, Symfony 2, Yii y Zend Framework

Introducción a MongoDB + PHP:

Establecimiento de una conexión

Para conectarse a mongo y seleccionar una base de datos se utiliza, por ejemplo:

$connection = new Mongo (); / / se conecta a localhost: 27017
$connection = new Mongo (“sindikos.com”); / / conectarse a un host remoto (puerto por defecto)
$connection = new Mongo (“sindikos.com: 65432″); / / conectarse a un host remoto en un puerto
$db = $connection-> selectDB (“db”); // Trabajar con ‘db’
$db = $connection-> selectDB (“otradb”); //Cambio de BBDD a ‘otradb’

Seguir leyendo »

Comments Off

Colección de Chuletas de Lenguajes de Programación

Cada lenguaje de programación, programa, framework, tipo de datos y muchos otros aspectos de la informática requieren aprender un lenguaje específico, con signos y expresiones que hacen que el código sea válido. Algunos son muy parecidos entre si (por ejemplo los diferentes lenguajes de programación comparten muchas estructuras, tipos de datos, formatos, etc.) pero cada uno tiene sus especificidades, con lo que un programador / desarrollador / diseñador de software debe memorizar muchas palabras clave y formas de llamar a métodos para cada lenguaje que conoce o encontrar una forma fácil de recordarlo. Para esto nacieron los ‘cheat sheets’  o chuletas que resumen visualmente los principales aspectos de cada lenguaje o programa. Aquí un resumen de algunos de ellos que os pueden ser útiles:

1. Lenguajes Programación: PHP / HTML5 / CSS / MySQL / JQuery / AJAX / Ruby on Rails

2. Diseño: Códigos RGB / Fonts

3. Útiles: Microformatos / Expresiones Regulares / Mod_rewrite / SEO / Buscadores

Lenguajes de Programación

PHP:

php-cheat-sheet Seguir leyendo »

Comments Off

Google Weather API + PHP

Ago 12 2011 Autor: J.P Aulet under API's,Google,PHP,Programación

El Tiempo en tu Web con PHP

Si quieres mostrar el tiempo de una ciudad / país en tu página web, puedes usar la API de Google Weather (Tiempo)  que es facil de configurar y cambiar para ajustarlo a tu localización. Puedes realizar consultas sobre la URI de Google con el siguiente formato:

http://www.google.com/ig/api?weather = [nombre de la ciudad]

Por ejemplo, solicitando la siguiente URI:

http://www.google.com/ig/api?weather=barcelona

Esta consulta retornará un archivo XML que se puede procesar facilmente con PHP con el siguiente código:

<?
$xml = simplexml_load_file(‘http://www.google.com/ig/api?weather=barcelona’);
$information = $xml->xpath(“/xml_api_reply/weather/forecast_information”);
$current = $xml->xpath(“/xml_api_reply/weather/current_conditions”);
$forecast_list = $xml->xpath(“/xml_api_reply/weather/forecast_conditions”);
?>
<html>
<head>
<title>Google Weather API</title>
</head>
<body>
<h1><?= print $information[0]->city['data']; ?></h1>
<h2>Hoy:</h2>
<div class=”weather”>
<img src=”<?= ‘http://www.google.com’ . $current[0]->icon['data']?>” alt=”weather”?>
<span class=”condition”>
<?= $current[0]->temp_f['data'] ?>&deg; F,
<?= $current[0]->condition['data'] ?>
</span>
</div>
<h2>Prevision:</h2>
<? foreach ($forecast_list as $forecast) : ?>
<div class=”weather”>
<img src=”<?= ‘http://www.google.com’ . $forecast->icon['data']?>” alt=”weather”?>
<div><?= $forecast->day_of_week['data']; ?></div>
<span class=”condition”>
<?= $forecast->low['data'] ?>&deg; F – <?= $forecast->high['data'] ?>&deg; F,
<?= $forecast->condition['data'] ?>
</span>
</div>
<? endforeach ?>
</body>
</html>

El resultado del código és el siguiente:

google weather api + php

Esperamos que os sirva de ayuda.

Comments Off

4 Ejemplos para escribir menos código PHP

Jun 28 2011 Autor: J.P Aulet under PHP,Programación

Con unos senzillos trucos se pueden ahorrar muchas líneas de código en PHP. Sólo hay que usar las funcionalidades adequadas:

Usar operadores lógicos (or y and) en vez de if

If Or & And
$ok= connect($mysql); if (!$ok) { log(‘Error mysql’); } connect($mysql) or log(‘Error mysql’);

Uso del operador ternario

If…else Operador Ternario
if ($foo == $ok){
print_r(“Correcto”);
}
else {
print_r(“Falso”);
}
$foo= $ok? ‘Correcto’ : ‘Falso’;

Usar for antes que while

While For
$i = 0;
while ($i < 100) {
$var[] = $aux[$i];
$i += 2;
}
for ($i = 0; $i < 100; $var[] = $aux[$i+=2]);

Declaración de variables múltiples

Declaración tipica Lista
$variable1 = 7;
$variable2 = 12;
$variable3 = 9;
list($variable1 ,$variable2 ,$variable3) = array(7,12,9);

Comments Off

Programación Orientada a Objetos en PHP5

Abr 15 2011 Autor: J.P Aulet under PHP,Programación

Tutorial 1/3:

La nueva versión de PHP5 incorpora muchas novedades en el trabajo sobre Objetos, muchas de ellos ya disponibles en otros lenguajes como JAVA cómo pueden ser __construct(), métodos privados, protegidas, interfaces… Esto nos permite crear clases más robustas y seguras. Vamos a repasar las nuevas funcionalidades:

0.- Introducción a las clases

Para construir una clase, usaremos la palabra reservada class. Una clase básica seria la siguiente, que muestra por pantalla al llamar el método ‘mostrar()’ el texto ‘Loren Ipsum’. Ejemplo:

codigo 1

1.- Visibilidad de propiedades y métodos

En la nueva versión, pueden declararse las propiedades (variables de una clase) y los métodos (funciones de una clase) cómo públicos, privados y protegidos respectivamente con las palabras reservadas public, private y protected seguidas de la declaración normal de estos. Si no se especifica, se declarará como público.

- Public: Puede accederse desde cualquier método de cualquier clase.

- Private: Puede accederse solo desde métodos de la propia clase.

- Protected: Puede accederse desde métodos de la propia clase y clases que extiende

Ejemplo:

codigo 2

2.- Constructores y destructores
Se usan los métodos __construct() y __destruct() para inicializar y destruir respectivamente un objeto. Ejemplo:

codigo 3

Pueden usarse parametros en los constructores.


3.- Uso de interfaces

Las interfaces se utilizan para definir el conjunto de métodos que implementa una clase y permiten crear código con el cual especificar qué métodos deben ser implementados por una clase, sin tener que definir cómo estos métodos son manipulados. Las interfaces deben ser declarados como public .

Una interface se declara con la palabra reservada: interface y se implementan con la palabra implements. Ejemplo:

codigo 4

Seguiremos este tutorial con la explicación de los puntos:

4.- Métodos y clases final
5.- Operador instanceof
6.- Auto-carga de clases: __autoload()

7.-El Operador de resolución de ámbito (::)


Comments Off

Optimiza tu codigo PHP

Abr 01 2011 Autor: J.P Aulet under General,PHP,Programación

Para mejorar la velocidad una página web se pueden hacer muchas cosas, cómo comprimir los archivos a GZIP, comprimir nuestros archivos CSS y javascript, hacer menos consultas HTTP (agrupando archivos) y un largo etc. Pero otra forma és mejorando la velocidad del código PHP. Esto hace que la carga del servidor sea menor y que Google indexe mejor nuestro sitio al condicionar el PageRank a la velocidad de carga. Para esto, unos sencillos trucos para mejorar el código*:

- implode y join: implode es un 5% más rápida.

- for y while: for és un 4% más rapido.

- echo y print:

echo ‘foo’.'bar’.'foo’.'bar’ vs print ‘foo’.'bar’.'foo’.'bar’ : echo es un 4% más rapido

echo ‘foo’.'bar’.'foo’.'bar‘ vs $a=’foo’;$b=’var’; echo $a.$b.$a.$b : sin variables és un 300% más rapido

- sizeof y count: count es un 12% más rápida.

- is_int y is_integer: is_int es un 9% más rápida.

- isSet y empty: Los dos son identicos, pero cuidado con:

is_array de un array: 160% más lento
is_array de un valor nulo: 1078% más lento
(isSet && _array) de un valor nulo: 542% (no se ejecuta el ‘is_array’) más lento

Por lo tanto, siempre comprovaremos si el valor existe antes de preguntar si es un array.

- ini_alter y ini_set: ini_set es un 19% más rápida.

- foreach y while:

foreach($foo as $key=>$val) $foo[$key] .= “bar”; vs. while(list($key) = each($foo)) $foo[$key] .= “bar”; : while és 211% más rápido

Truco:

$key = array_keys($foo);
$size = sizeOf($key);
for ($i=0; $i<$size; $i++) $foo[$key[$i]] .= “bar”;

Esta forma és un 72% más rapida que ‘while’, por lo tanto un 263% mas rapida que ‘foreach’

- preg_match vs. strpos: strpos és un 51% más rapido (strstr y ereg són aún más lentos).

- if es más rápido que switch/case, y ligeramente más rápido es usar == que ===

- Si un metodo puede ser static declararlo así. Es 4 veces más rápido.

- Incrementar una variable local indefinida és unas 9 veces más lento que una pre-inicializada. Siempre inicializar todas las variables.

- LO MÁS IMPORTANTE: no usar funciones dentro de loops. Por ejemplo:

$size = count($x); for ($i=0; $i<$size; $i++) vs. for ($i=0; $i<count($x); $i++) : pre-calcular el tamaño és entre un 1500% i 47940% más rapido (dependiendo del tipo de dato pre-calculado).

Aplicando todas estas tecnicas podemos aumentar considerablemente el rendimiento del PHP.

Vía: PHP Benchmark y pruebas propias.
*Atención
: Los resultados de las pruebas puede variar en otros entornos, los datos expresados en % són medianas de varias pruebas y son sólo una referéncia de la mejora del rendimiento y no son, por lo tanto, iguales en todos los sitios, debido a diferencias en el compilador, los tipos de datos usados, la versión de PHP usada y un largo etc.

Comments Off