ruby on rails - Mongodb: ¿Qué saber antes de usar?
ruby-on-rails mongomapper (5)
1. Query no distingue entre mayúsculas y minúsculas
eq
"_id": "1da259c70fe3392c3b000002",
"name": "Dany"
array(''name'' => ''dany'') :: results 0
array(''name'' => ''Dany'') :: results 1
2. ID de la última 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''];
También _id es único por colección, puede ser diferente en otro servidor
4. MongoDB tiene soporte para LIMIT, OFFSET, ORDER
para cierta clasificación anticipada puede usar el Marco de Agregación.
5. En SQL, la inyección Sql en MongoDB es inyección de array
Entonces, cuando escriba algún uso de datos (cadena) o revise 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. 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 pasado con MongoDb pero ahora mismo 3.0 es bastante impresionante y estable.
Estoy comenzando un proyecto de hobby (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?
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?
Aquí hay un gran principiante / introducción al podcast MongoDb de .NET Rocks -
http://www.dotnetrocks.com/default.aspx?ShowNum=507
Mike Dirolf es interevisado ... 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.
Debes echar un vistazo definitivo 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 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
Definitivamente apoyaré la recomendación de MongoMapper si vas a usar 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 trabajas fuera de Rails, te recomendaría mantenerte 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 recomendaría, especialmente porque mencionaste saber cómo normalizar un esquema, es no 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 las consultas avanzadas , los índices multikey y MapReduce para tener una idea de algunas de las ventajas y fortalezas únicas de una base de datos NoSQL.
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 he encontrado muy útil:
Use Mongoid en lugar de Mongomapper
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, agréguela a su archivo gem:
gem ''mongoid'', "~> 2.0.0.beta"
La beta actual es 20, pero como dije, mañana está el lanzamiento del candidato.
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.
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 Forgery con 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.
Pregúntame si necesitas más información.
Editar: