2010-01-23 17 views
91

Estoy comenzando un proyecto de pasatiempo (sin ingresos) usando Ruby on Rails. He realizado una buena cantidad de desarrollo en Rails usando Postgresql, y puedo hacer una buena imitación del esquema normalizado. Sin embargo, Mongrodb se ve brillante y nuevo. ¿Qué mejor para probar algo nuevo que un proyecto de hobby?Mongodb: ¿Qué se debe saber antes de usar?

Piense en cuándo comenzó a usar Mongodb. ¿Qué técnicas aprendiste más tarde que te hicieron decir, "¡Si tan solo supiera eso cuando comencé!" ¿Qué complementos descubrió que habría utilizado desde el principio, si lo hubiera sabido? ¿Qué referencias te gustaría tener marcadas?

Respuesta

63

Definitivamente apoyaría la recomendación de MongoMapper si va a utilizar MongoDB con Rails. Sin embargo, le advertiré que (hasta el momento) no hay documentación aparte de un par de publicaciones en el blog. Si no te sientes cómodo explorando el código fuente para ver cómo funcionan las cosas, probablemente aún no sea para ti.

Si trabaja fuera de Rails, le recomendaría que se mantenga alejado de MongoMapper. Debido a que está trabajando MongoDB en algo similar a lo que esperamos de un ORM respaldado por SQL, realmente no le da una buena idea del poder y del pensamiento diferente detrás de MongoDB. Dedica algo de tiempo a jugar con el controlador de ruby ​​de nivel más bajo, e incluso en la consola de JavaScript.

La otra cosa que recomiendo, especialmente porque mencionaste saber cómo normalizar un esquema, es y no para pensar en MongoDB como una base de datos por ahora. La forma en que organizas tus datos en MongoDB es muy diferente a la de una base de datos relacional. Trata de pensar más en ello como un lugar para almacenar y recuperar hashes de Ruby. Puedes hacer algunas cosas relacionales con MongoDB, pero te recomiendo que te mantengas solo con documentos independientes mientras tratas de entender NoSQL.

En cuanto a los enlaces que deberías mirar, te recomiendo leer todo lo que puedas en el sitio de MongoDB. Su documentación es muy buena. Particularmente, eche un vistazo a advanced queries, multikey indexes y MapReduce para tener una idea de algunas de las ventajas y fortalezas únicas de una base de datos NoSQL.

2

Debes echarle un vistazo definitivamente a junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Pero también te recomiendo jugar un poco con el controlador puro de Ruby Mongo para ver cómo funciona el mongo-mapper bajo el capó. No es muy difícil poner algunos datos en una base de datos de Mongo usando Ruby.

Supongo que ya has encontrado el Tutorial de Ruby Mongo. En caso de que no lo haya hecho, aquí está el enlace: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

+0

Lo creas o no, eso no estaba en los enlaces que he puesto a la cola para leer, y se ve como uno bueno. Gracias. –

3

Aquí es un gran principiante/Introducción a MongoDB podcast Rocas .NET -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf se intereviewed ... que trabaja en el proyecto MongoDB. Ah, y la calidad del sonido es excelente.

Mike Dirolf es Ingeniero de Software en 10gen, donde trabaja en el proyecto MongoDB. Trabaja principalmente en controladores cliente para Python y Ruby, pero también se toma un tiempo para hablar sobre MongoDB: ha presentado en EuroPython, Strange Loop Conf, RubyEnRails, RuPy y RubyConf, así como en grupos Meetup en Nueva York, Londres, Washington. DC y San Francisco.

26

Estoy casi en la misma etapa que usted. Comenzando un nuevo proyecto con MongoDB. Tengo alrededor de 7 semanas de experiencia.Esto es lo que he encontrado muy útil:

Uso Mongoid en lugar de MongoMapper

http://mongoid.org/

La documentación es excelente. En serio, excelente. Le tomará aproximadamente 15 minutos leer toda la documentación y tendrá una idea muy exacta de lo que puede hacer y lo que no puede hacer con Mongoid.

Mañana, se lanzará la versión candidata para una nueva versión principal de mongoid. Va a traer muchas cosas útiles.

estoy usando Rails 3. Para instalar la versión de desarrollo añadir esto a su archivo de joya:

joya 'MongoId', "~> 2.0.0.beta"

beta actual es 20, pero como dije, mañana está el candidato a la liberación.

También te sugiero que te unas al grupo de google también. Tiene poco tráfico y la gente está dispuesta a responder cualquier pregunta. Por ejemplo, les mostré mi primer diseño de modelo DB y me dieron muchas formas de mejorarlo. El creador de Mongoid responde tus preguntas también.

En dos palabras: gran comunidad.

Hay este plugin que le permite utilizar maquinista con mongo:

https://github.com/nmerouze/machinist_mongo

funciona bastante bien.

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git', 
:branch => 'machinist2' 

Puede usar Forgery with Machinist. Mezcla impresionante

https://github.com/sevenwire/forgery

Otra cosa que quiero decir. Vengo de un mundo de base de datos de relaciones, por lo que esto sonaba realmente extraño al principio: puedes guardar archivos en una base de datos mongo.

De hecho, podría ser más rápido que administrarlos como solíamos hacerlo. Esto se debe al apoyo de mongo para sharding. Sharding significa que puede usar un conjunto de computadoras para servir a la base de datos de Mongo. Es inconsútil. Maestro-esclavo. Entonces puede servir un archivo desde muchas computadoras, cada una enviando una porción. Se escala muy bien :)

Esto se hace usando GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid admite esa configuración maestro-esclavo.

Pregunte si necesita más información.

Editar:

También: http://railscasts.com/episodes/238-mongoid

8

1. Consulta su no entre mayúsculas y minúsculas

eq

"_id": "1da259c70fe3392c3b000002", 
"name": "Dany" 

array('name' => 'dany') :: results 0 
array('name' => 'Dany') :: results 1 

2.Última ID de inserción:

$coll->insert($user, true); 
echo (string) $user['_id']; 

3. _id es un objeto MongoId

Búsqueda por ID:

$p->findOne(array('_id' => new MongoId($UID )), array('proj')); 

Mostrar _id:

$coll['_id'] = (string) $coll['_id']; 

también _id sólo es único por la colección , puede ser diferente en otro servidor

4. MongoDB tiene soporte para LÍMITE, DESPLAZAMIENTO, PEDIDO

para una clasificación previa puede utilizar el Marco de agregación.

5. En SQL es de inyección SQL en MongoDB es la inyección de matriz

Así que cuando escribir un cierto uso de datos (cadena) o cheque is_array

$req = (string) $range['name']; 

6. HDD DOS

tamaño predeterminado _POST es 8MB en PHP, IN Mongo hay un límite por documento de 16MB. Por lo tanto, imagínese Some user spoof eq USER_AGENT STRING en su script analítico y luego envíe 16MB por inserción individual.

7. Hubo algunos problemas en el pasado con MongoDb pero en este momento 3.0 es bastante impresionante y estable.

Cuestiones relacionadas