Mongodb: O que saber antes de usar? [fechadas]

93

Estou começando um projeto de hobby (sem receita) usando Ruby on Rails. Eu fiz um bom desenvolvimento em Rails usando Postgresql e posso fazer uma imitação muito boa do esquema normalizado. No entanto, Mongrodb parece novo e brilhante. O que é melhor para experimentar algo novo do que um projeto de hobby?

Lembre-se de quando você começou a usar o Mongodb. Que técnicas você aprendeu mais tarde que o fizeram dizer: "Se eu soubesse disso quando comecei!" Quais plug-ins você descobriu que teria usado desde o início, se soubesse? Que referências você gostaria que fossem marcadas?

Wayne Conrad
fonte

Respostas:

63

Eu definitivamente apoiaria a recomendação do MongoMapper se você for usar o MongoDB com Rails. Vou avisá-lo, no entanto, que não há (até agora) nenhuma documentação além de algumas postagens de blog. Se você não se sente confortável cavando no código-fonte para ver como as coisas funcionam, provavelmente ainda não é para você.

Se você estiver trabalhando fora do Rails, recomendo ficar longe do MongoMapper. Por estar transformando o MongoDB em algo semelhante ao que esperamos de um ORM baseado em SQL, ele realmente não dá uma boa ideia do poder e do pensamento diferente por trás do MongoDB. Passe algum tempo brincando com o driver ruby ​​de nível inferior e até mesmo no console javascript.

Outra coisa que eu recomendo, especialmente porque você mencionou que sabe como normalizar um esquema, não é pensar no MongoDB como um banco de dados por enquanto. A maneira como você organiza seus dados no MongoDB é muito diferente de um banco de dados relacional. Tente pensar nisso mais como um lugar para armazenar e recuperar hashes Ruby. Você pode fazer algumas coisas relacionais com o MongoDB, mas eu recomendo ficar apenas com documentos autocontidos enquanto tenta entender o NoSQL.

Quanto aos links que você deve consultar, eu recomendo fortemente a leitura de tudo que você puder no site do MongoDB. A documentação deles é muito boa. Particularmente, dê uma olhada nas consultas avançadas , índices de várias chaves e MapReduce para ter uma ideia de algumas das vantagens e pontos fortes exclusivos de um banco de dados NoSQL.

Emily
fonte
26

Estou quase no mesmo estágio que você. Iniciando um novo projeto com MongoDB. Tenho cerca de 7 semanas de experiência. Isso é o que eu achei muito útil:

Use Mongoid em vez de Mongomapper

http://mongoid.org/

A documentação é excelente. Sério, excelente. Você deve levar cerca de 15 minutos para ler toda a documentação e terá uma ideia exata do que pode ou não fazer com o Mongoid.

Amanhã, o candidato a lançamento para uma nova versão principal do mongoid será lançado. Vai trazer muitas coisas úteis.

Estou usando o Rails 3. Para instalar a versão de desenvolvimento, adicione ao seu arquivo gem:

gem 'mongoid', "~> 2.0.0.beta"

O beta atual é 20, mas como eu disse, amanhã há o candidato a lançamento.

Também sugiro que você participe do grupo do google também. Tem pouco tráfego e as pessoas estão muito dispostas a responder a qualquer pergunta. Por exemplo, mostrei a eles meu primeiro projeto de modelo de banco de dados e eles me deram muitas maneiras de melhorar isso. O criador do Mongoid também responde às suas perguntas.

Em duas palavras: grande comunidade.

Existe este plug-in que permite usar o Machinist com o mongo:

https://github.com/nmerouze/machinist_mongo

Funciona muito bem.

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

Você pode usar o Forgery with Machinist. Mistura incrível.

https://github.com/sevenwire/forgery

Outra coisa que quero dizer. Eu venho de um mundo de banco de dados de relacionamento, então isso pareceu muito estranho no início: você pode salvar arquivos em um banco de dados mongo.

Na verdade, pode ser mais rápido do que gerenciá-los como costumávamos fazer. Isso se deve ao suporte do mongo para fragmentação. Sharding significa que você pode usar um cluster de computadores para servir o banco de dados Mongo. É perfeito. Senhor de escravos. Assim, você pode servir um arquivo de vários computadores, cada um enviando uma parte. Escala muito bem :)

Isso é feito usando GridFS. http://www.mongodb.org/display/DOCS/GridFS

O Mongoid suporta essa configuração mestre-escravo.

Pergunte-me se você precisa de mais informações.

Editar:

Além disso: http://railscasts.com/episodes/238-mongoid

Nerian
fonte
8

1. A consulta não diferencia maiúsculas de minúsculas

eq

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

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

2. Último ID inserido:

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

3. _id é um objeto MongoId

Encontrar por id:

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

Mostrar _id:

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

Além disso, _id é único apenas por coleção, pode ser diferente em outro servidor

4. MongoDB tem suporte para LIMIT, OFFSET, ORDER

para alguma classificação antecipada, você pode usar o Aggregation Framework.

5. Em SQL, é injeção Sql, no MongoDB é injeção de Array

Então, ao escrever alguns dados, use (string) ou verifique is_array

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

6. HDD DOS

o tamanho padrão de _POST é 8 MB em PHP, no Mongo há um limite de 16 MB por documento. Então imagine Algum usuário spoof eq USER_AGENT STRING em seu script analítico e envie 16 MB por inserção única.

7. Houve alguns problemas no passado com o MongoDb, mas agora o 3.0 é muito bom e estável.

user956584
fonte
3

Aqui está um ótimo iniciante / introdução ao podcast MongoDb do .NET Rocks -

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

Mike Dirolf é entrevistado ... ele trabalha no projeto MongoDb. Ah, e a qualidade do som é excelente.

Mike Dirolf é engenheiro de software na 10gen, onde trabalha no projeto MongoDB. Ele trabalha principalmente com drivers de cliente para Python e Ruby, mas também tira um tempo para falar sobre MongoDB - ele apresentou na EuroPython, Strange Loop Conf, RubyEnRails, RuPy e RubyConf, bem como em grupos de encontro em Nova York, Londres, Washington DC e San Francisco.

Kris Krause
fonte
2

Você deve definitivamente dar uma olhada no junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Mas eu também recomendo que você brinque um pouco com o driver Ruby Mongo puro para ver como o mongo-mapper funciona sob o capô. Não é muito difícil colocar alguns dados em um banco de dados Mongo usando Ruby.

Eu acho que você já encontrou o tutorial Ruby Mongo. Caso você não tenha feito isso, aqui está o link: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

t6d
fonte
Acredite ou não, não estava nos links que fiz na fila para ler, e parece um bom. Obrigado.
Wayne Conrad