Introducción al mundo noSQL

NoSQL es la nueva palabra de moda. Una solución pensada para el almacenamiento de gran cantidad de datos para su posterior uso. Esto ya nos suena, una base de datos, pero realmente, ¿cual es la diferencia?

NoSQL es un término usado en informática para agrupar una serie de almacenes de datos no relacionales que no proporcionan garantías ACID. Normalmente no tienen esquemas fijos de tablas ni sentencias "join".Wikipedia

La diferencia ya es clara, no es una base de datos como las que conocemos actualmente, es bastante más peculiar y tira por tierra bastantes de los conceptos y formas de trabajar a los que estamos acostumbrados. Y aunque el termino en si sea nuevo, la teoría tiene sus años, bastantes más que las bases de datos relacionales, pero ahora vuelve con fuerza para salvarnos la vida en algunos casos concretos, evitando problemas de escalabilidad o rendimiento a costa de algo de fiabilidad.

Hasta ahora el cuello de botella siempre ha sido el acceso a los datos y la forma de evitarlo la escalabilidad vertical, esto es, añadiendo más memoria, procesamiento y discos rápidos. Pero todo escalado vertical tiene un límite, y es el que pone nuestro bolsillo y la propia tecnología. Por otro lado, las bases de datos relacionales no suelen tender a escalar bien horizontalmente.

  • Normalización o desnormalización
  • Replicación asíncrona y por lo tanto problemática
  • ¿Cómo distribuyes la carga de escrituras?
  • ¿Transacciones distribuidas? Uff... no!

Es importante tener en cuenta que no es un reemplazo a las bases de datos SQL que llevamos usando desde hace años, si no que un complemento que nos ayudará en casos particulares, por lo tanto tened en mente que noSQL es en realidad no(tOnly)SQL 😀

A modo introducción vamos a ver el funcionamiento de MongoDB, una de las que más me han impresionado por su facilidad de uso y rapidez.

MongoDB agrupa los datos documentos (y sub-documentos). Esto es, objetos sin ningún tipo de esquema fijo, como por ejemplo un array de PHP o una tupla de Python. Los datos se guardan en BSON (JSON binario) y permite consultas algo más complejas que algunas otras soluciones NoSQL.

BSON [bee · sahn], short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays with in other documents and arrays. BSON also con­tains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

Además soporta el uso de índices compuestos, simples o geo-espaciales de dos dimensiones, auto particionado de datos y replicación master-slave entre otras muchas cosas. Importante para los desarrolladores, ¡existe módulo de PHP! 😉 No en vano, la gente lo empieza a llamar el MySQL de NoSQL.

Después de esta pequeña introducción vamos a jugar un poco con MongoDB 😀 Para ello nos bajamos el binario de http://www.mongodb.org/display/DOCS/Downloads La instalación es tan sencilla como descomprimir y lanzar el binario del servidor (mongod):

bin # ./mongod
./mongod --help for help and startup options
Fri May  7 21:16:00 Mongo DB : starting : pid = 307 port = 27017 dbpath = /data/db/ 
master = 0 slave = 0  64-bit 
Fri May  7 21:16:00 db version v1.4.1, pdfile version 4.5
Fri May  7 21:16:00 git version: nogitversion
Fri May  7 21:16:00 sys info: Darwin iMac-Punisher.local 10.3.0 Darwin Kernel Version 10.3.0: Fri 
Feb 26 11:58:09 PST 2010; root:xnu-1504.3.12~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_42
Fri May  7 21:16:00 waiting for connections on port 27017
Fri May  7 21:16:00 web admin interface listening on port 28017

A primera vista ya vemos datos interesantes. Los datos se van a guardar en la ruta /data/db, que debemos crear con antelación o indicar otra mediante parámetro, y que el puerto de escucha será 27017. Si no le indicamos nada, el demonio se lanzará en foreground y la consola se quedará "bloqueada". Podremos parar el demonio con un simple Control+C.

La consola para empezar a usar mongoDB se llama "mongo", que se encuentra en la misma ruta de binarios que el resto.

bin $ ./mongo
MongoDB shell version: 1.4.1
url: test
connecting to: test
type "help" for help
\> 

Vemos las bases de datos existentes y nos creamos la nuestra propia:

> show dbs
admin
local
\> use midb
switched to db midb

Como veis no es necesario crearla antes de usarla, simplemente dile que la quieres usar y si no existe la creará. Ahora vamos a meter una serie de datos:

\>a = { nombre : "Miguel Angel", apellidos : "Nieto Salazar", edad : "27", localidad : "Barakaldo" }
{
    "nombre" : "Miguel Angel",
    "apellidos" : "Nieto Salazar",
    "edad" : "27",
    "localidad" : "Barakaldo"
}
\>b = { nombre : "Estibaliz", apellidos : "Sanchez", Nacimiento : "Logroño", estudio : "Comercio" } 
{
    "nombre" : "Estibaliz",
    "apellidos" : "Sanchez",
    "Nacimiento" : "Logroño",
    "estudio" : "Comercio"
}
\> db.coll.save(a);
\> db.coll.save(😎;

Y como ya dije anteriormente, no existen tablas ni esquemas, añades datos según lo vas necesitando, sin necesidad de seguir un patrón o estando obligado a rellenar unos datos en concreto. Todos estos documentos se guardarán en la colección "coll" dentro de la base de datos midb. Una colección no es más que una agrupación de datos BSON que estos a su vez se pueden agrupar en namespaces. Por ejemplo blog.post y blog.comments son dos colecciones que cuelgan del mismo namespace. Esto es solamente a nivel organizativo para el usuario, internamente no afecta en nada.

Una vez que tenemos los datos introducidos, podemos hacer consultas:

\> db.coll.find({edad:"27"});
{ "_id" : ObjectId("4be029e11967ab80a305e1f0"), "nombre" : "Miguel Angel", "apellidos" : "Nieto
Salazar", "edad" : "27", "localidad" : "Barakaldo" }
\> db.coll.find({Nacimiento:"Logroño"});
{ "_id" : ObjectId("4be029e41967ab80a305e1f1"), "nombre" : "Estibaliz", "apellidos" : "Sanchez", 
"Nacimiento" : "Logroño", "estudio" : "Comercio" }

Facil, sencillo y para toda la familia. Cuando lo ves así piensas, "esto es lo lógico, el almacenamiento de datos tendría que ser así siempre" 😀

También podemos almacenar datos binarios, esto es, ficheros. Puedes olvidarte de todo lo que has sufrido con los tipos BLOB en otras bases de datos. MongoDB guarda los ficheros en la base de datos haciendo uso de las especificaciones GridFS. BSON solo permite almacenar datos de hasta 4 megas, para saltarnos esta limitación GirdFS divide de forma transparente los ficheros en grupos de documentos (lo cual también nos permitira buscar por rangos de bytes).

Listamos el contenido, de momento no hay ningún fichero:

$ mongofiles list
connected to: 127.0.0.1

Añadimos un fichero, en este caso un documento PDF:

$ mongofiles put /Users/punisher/Documents/High\ Performance\ MySQL\ Second\ Edition.pdf 
connected to: 127.0.0.1
added file: { _id: ObjId(4be46d25a409d73217ca227😎, filename: "/Users/punisher/Documents/High
Performance MySQL Second Edition.pdf", length: 5904835, chunkSize: 262144, uploadDate: new 
Date(1273261349209), md5: "082f8333d45d1e3b7bce6323d0da59f0" }
done!

Listamos de nuevo:

$ mongoflist
connected to: 127.0.0.1
/Users/punisher/Documents/High Performance MySQL Second Edition.pdf 5904835

Lo sacamos de la base de datos a nuestro sistema de ficheros:

$ mongofiles get "/Users/punisher/Documents/High Performance MySQL Second Edition.pdf"
connected to: 127.0.0.1
done write to: /Users/punisher/Documents/High Performance MySQL Second Edition.pdf

No lo voy a negar, estoy enamorado de mongoDB y del concepto noSQL. Olvídate de las relaciones, de optimizar queries, normalizar tablas... dedicate a lo que importa, guardar y sacar datos. Una revolución para los que nos guiamos por la filosofía KISS (Keep it simple, stupid)


Comments

    モンクレール アウトレット 仙台 モンクレール ダウン 偽物見分け方,モンクレール 渋谷 レディース モンクレール マヤ 写真,モンクレール zin 評価 モンクレール ペティ nike jordans 11 ナイキ ニット帽,ナイキ max air リュック,ナイキ ランニング 時計 使い方 シャネル イリュージョンドンブル  使いやすさ人気ランキング,シャネル 値上げ 2014 8月,h1007 シャネル 定価 オオミヤ トリーバーチ デニム バッグ,トリーバーチ オレンジ メンズ バック,ニューヨークトリーバーチ路面店 ヴィトン n63095 安く アウトレット,アメ横 併行輸入 ヴィトン,中古 ヴィトン アルマ シリアルの見方 グッチのノベルティ,ジップアラウンド グッチ 財布,gucci 充電器 ugg sheepskin cuff boot フェンディ ドクター,フェンディファーコート 2014年,フェンディー イタリア ugg メンズ,楽天アグ激安ビーサン,オーストラリア アグ タグ 金具 姫路 ダンヒル,キーケース メンズ ダンヒル,ダンヒル バックル 外し方 池袋東武子供服 ドレス,スポーツアクセ かっこいい,メンズペイントズボン カルティエ ラブブレス 付け方,ブレスレット カルティエ ディアマンレジェ カラット,カリブル ドゥ カルティエ 種類 ティンバーランド ホワイト ブーツ,アースキーパーズ ティンバーランド,ティンバーランド ローカット

    ティンバーランド ホワイト ブーツ,アースキーパーズ ティンバーランド,ティンバーランド ローカット on

    バーバリープローサムナイロンバッグ,バーバリーキーホルダー,バーバリー 子ども ケープ ミュウミュウ 財布 パープル,miumiu 財布 がま口 修理,ミュウミュウ ハラコ コーチ ロゴ トートバック,コーチ ニューヨーク限定モデル,coach コーチ バック バッグ 斜め nike free run 3 buy online ルイヴィトン ワイン ヴィトン バッグ 溶けた ヴィトン 財布 折り紙,ルイヴィトン 財布 モノグラム マルチカラー リボン,ルイヴィトン 長財布 スイート モノグラム ポルトフォイユ サラ m90126 ヴィトン 財布 ナイキ エアジョーダン6 オリンピック,スノボー ウェア ナイキ,人気スニーカー ナイキ エルメスロゴカラー,超sクラス エルメス,エルメス ガーデンパーティ グアム免税 Nike Air Max 1 Essential Femme Chaussures Noir/Laser Crimson/Blanche ティンバーランド サイズ 選び方,ティンバーランド 評判,ティンバーランド ブーツ 着こなし ダンヒルのバック 何の革,ダンヒル マーク,ダンヒル ライター 歴史 プラダ サンダル 2014 ヴェルニ,プラダ 長財布 リボン 偽物,プラダ ペア 宮崎市 fendi,フェンディ マルチカラーフラットシューズ,ピーカーブーフェンディパイソン

    宮崎市 fendi,フェンディ マルチカラーフラットシューズ,ピーカーブーフェンディパイソン on

    ティンバーランド 24,ティンバーランド 激安,ティンバーランド 芸能人 ピンクメンズブレスレット,ボッテガヴェネタ 御殿場アウトレット 本物,韓国 ブランドコピー ブログ ルイヴィトンカプシーヌ,岡山 ヴィトン 求人,韓国買い物 ヴィトンビニール袋 ブルガリ スネークリング ゴールドステンレス,iphone5s ブルガリ,amazonブルガリ 白 二つ折り シャネル サングラス成田空港,パロディー シャネル ネックレス,シャネルネイルスタンプ アグ ミニネイビー ジーパンにあう,アグブーツ 色 クラッシックショート,ugg 25 激安 メンズ モンクレール 青山 メンズ モンクレール アウトレット 東京 モンクレール nantesfur,リモワ モンクレール 通販,モンクレール ダウン 限定 モンクレール ダウン 富山 モンクレール メンズ ニューバランス スーツ,ニューバランス サイズ選び,ニューバランス 迷彩 buy nike mens shox r6 online shop nike air max 90 vt Canada キラキラベルト メンズ,長島 アウトレット サンダル,大学生ポロシャツ black free runs フェンディサングラス,フェンディヘッドホン,フェンディ awtシャツ バーバリー 二 つ折り 財布,レディース バーバリー コート 秋冬,amazonのバーバリーのスポーツウォッチ

    バーバリー 二 つ折り 財布,レディース バーバリー コート 秋冬,amazonのバーバリーのスポーツウォッチ on

    Miguel Ángel Nieto » Introducción al mundo noSQL [url=http://www.go58j0p3hcb011ou2iw8dx6205rr195ms.org/]ugdmtervjd[/url] agdmtervjd gdmtervjd http://www.go58j0p3hcb011ou2iw8dx6205rr195ms.org/

    gdmtervjd on

    Ensure your your bed is cozy. The problem may not be insomnia if you have an old bed. It could be that your bed furniture is just too big not comfortable to own a really good time resting. Test asleep in one more destination, whether that be about the couch or simply a night time in any lodge. Replace it if your bed is the culprit.

    cheap ralph lauren sale on

    Psst! This Information Has The Insider secrets About Sleep loss You Ought To Discover

    louis vuitton bags to buy online on

    イタリア ブレスレット サイズ,ボッテガショルダーバックメンズ中古,軽井沢アウトレット タバコケース ugg jillian boot embellishments for invitations ドルガバ+ベルト+メンズ+コピー,ドルガバ ポロシャツ コピー,ドルガバ迷彩バッグ ブルガリ オクト 白,ブルガリ クロノグラフ ベルト交換,ブルガリ 財布スーパーコピー クロエ ポーチ 紗栄子,クロエ 財布 エルシー 本物,クロエベイリー買いました カルティエベルト偽物,カルティエ パシャ レディース 値段,カルティエ トーチュとロードスターの違い トリーバーチ 銀座 限定 リュック,トリーバーチバック格安,トリーバーチ robinson quilted tote 子供 ニューバランス,ニューバランス1700復刻,ベアフット ニューバランス ケイトスペード ファミリーセール 2014,ケイトスペードあいほんケース,アウトレット ケイトスペード オープン 長財布 miumiu geranio キーケース,miumiu レザーエナメルリボン antico+pink,miumiu キーリング コインケース シャネル 水着 2014,シャネル 財布 静岡市,chanel ネイビー バック コンバース モノクローム,黒コンバース ハイカット コーデ,コンバース 新作 ダンヒルiフォンカバー手帳,ダンヒルライター スリー ライン,ダンヒル ライター 音

    ダンヒルiフォンカバー手帳,ダンヒルライター スリー ライン,ダンヒル ライター 音 on

    ケイトスペード 財布 楽天,ケイトスペード 財布アウトレット,ケイトスペード 40代 女性 持つには 韓国 偽物 トリーバーチ ポーチ,トリーバーチ 岡山,トリーバーチ バッグ 口コミ セリーヌバッグ価格,セリーヌ マカダム pvc,セリーヌ サングラス 修理 gucci財布コピーgucciショップ,old グッチ 楽天,gucci 二つ折り財布 黒 ピンク 青 ヴィトン リュック 売る,大黒屋 買取 ルイヴィトン クロワッサン,ドンキホーテヴィトン長財布m60531 ダンヒル ビンテージ,ダンヒルニット棒,ダンヒルメガネフレーム中古 コンバース レース,コンバース ヒョウ柄 ハイカット,コンバース ハイカット コーディネート white nike air jordans nike free 3.0 advantage エルメス パンダバッグ,エルメス 50,40代 エルメスマネークリップ 高島屋 ブルガリ 食器,ブルガリネックレスコピー,ローマ ブルガリ 定休日 Nike Free run Womens Shoes 5.0 breathable42763 モンクレール ダウン ケープ モンクレール タオル モンクレール フロリアン 2013,モンクレール ダウン 人気 理由 モンクレール ガムブルー モンクレール 青山 店員,モンクレール ダウン セリ モンクレール ダウン 安く買う方法

    モンクレール ダウン ケープ モンクレール タオル モンクレール フロリアン 2013,モンクレール ダウン 人気 理由 モンクレール ガムブルー モンクレール 青山 店員,モンクレール ダウン セリ モンクレール ダウン 安く買う方法 on
Next → Page 1 of 5