Mongodb: ¿Qué hay que saber antes de usar? [cerrado]

93

Estoy comenzando un proyecto de hobby (sin ingresos) usando Ruby on Rails. He realizado bastante desarrollo en Rails usando Postgresql, y puedo hacer una imitación bastante buena del esquema normalizado. Sin embargo, Mongrodb luce brillante y nuevo. ¿Qué mejor para probar algo nuevo que un proyecto de hobby?

Piense en cuando 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 hubiera utilizado desde el principio, si solo lo hubiera sabido? ¿Qué referencias le gustaría que tuvieran marcadas?

Wayne Conrad
fuente

Respuestas:

63

Definitivamente segundo la recomendación de MongoMapper si vas a usar MongoDB con Rails. Sin embargo, le advertiré que (hasta ahora) no hay más documentación que un par de publicaciones en el blog. Si no se siente cómodo profundizando en el código fuente para ver cómo funcionan las cosas, probablemente aún no sea para usted.

Si está trabajando fuera de Rails, le recomiendo 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. Dedique algún tiempo a jugar con el controlador ruby ​​de nivel inferior, e incluso en la consola de JavaScript.

La otra cosa que recomendaría, especialmente porque mencionaste saber cómo normalizar un esquema, no es pensar en MongoDB como una base de datos por ahora. La forma en que organiza sus datos en MongoDB es muy diferente a la de una base de datos relacional. Intente pensar en ello más como un lugar para almacenar y recuperar hashes de Ruby. Puede hacer algunas cosas relacionales con MongoDB, pero le recomiendo que se quede solo con documentos independientes mientras intenta entender NoSQL.

En cuanto a los enlaces que debe consultar, le recomiendo leer todo lo que pueda en el sitio de MongoDB. Su documentación es muy buena. En particular, eche un vistazo a las consultas avanzadas , los índices de múltiples claves y MapReduce para tener una idea de algunas de las ventajas y fortalezas únicas de una base de datos NoSQL.

Emily
fuente
26

Estoy casi en la misma etapa que tú. Comenzando un nuevo proyecto con MongoDB. Tengo alrededor de 7 semanas de experiencia. Esto es lo que me ha resultado muy útil:

Utilice Mongoid en lugar de Mongomapper

http://mongoid.org/

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

Mañana, se dará a conocer el candidato de lanzamiento 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, agregue esto a su archivo de gemas:

gema 'mongoide', "~> 2.0.0.beta"

La beta actual es 20, pero como dije, mañana está la versión candidata.

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

En dos palabras: gran comunidad.

Existe este complemento que le permite usar Machinist 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'

Puedes usar Falsificación con Machinist. Mezcla impresionante.

https://github.com/sevenwire/forgery

Otra cosa que quiero decir. Vengo de un mundo de bases de datos de relaciones, así 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 hacer. Esto se debe al soporte de mongo para la fragmentación. Sharding significa que puede usar un grupo de computadoras para servir la base de datos de Mongo. Es perfecto. Maestro-esclavo. De modo que puede servir un archivo desde muchas computadoras, cada una enviando una parte. Escala muy bien :)

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

Mongoid admite esa configuración maestro-esclavo.

Pregúntame si necesitas más información.

Editar:

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

Nerian
fuente
8

1. La consulta no distingue entre mayúsculas y minúsculas

eq

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

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

2. Última identificación de inserción:

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

3. _id es un objeto MongoId

Buscar por id:

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

Mostrar _id:

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

Además, _id es único por colección, puede ser diferente en otro servidor

4. MongoDB tiene soporte para LIMIT, OFFSET, ORDER

para una clasificación avanzada, puede utilizar Aggregation Framework.

5. En SQL, la inyección Sql en MongoDB es la inyección Array

Entonces, cuando escriba algunos datos, use (cadena) o verifique is_array

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

6. HDD DOS

El tamaño predeterminado de _POST es de 8 MB en PHP, en Mongo hay un límite por documento de 16 MB. Así que imagina que algún usuario falsifica eq USER_AGENT STRING en tu script analítico y luego envía 16 MB por inserción individual.

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

usuario956584
fuente
3

Aquí hay una gran introducción / principiante al podcast de MongoDb de .NET Rocks:

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

Mike Dirolf es entrevistado ... 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 de clientes 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 de reuniones en la ciudad de Nueva York, Londres, Washington. DC y San Francisco.

Kris Krause
fuente
2

Definitivamente deberías echar un vistazo a junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Pero también te recomiendo que juegues un poco con el controlador Ruby Mongo puro para ver cómo funciona 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 encontraste 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

t6d
fuente
Lo crea o no, eso no estaba en los enlaces que hice cola para leer, y parece uno bueno. Gracias.
Wayne Conrad