Ir para conteúdo
Marcosvn

Sistema de seguidores e curtidas com MongoDB

Recommended Posts

estou desenvolvendo um site para escritores que irá possui um sistema de seguidores, curtidas e comentários. Minha intenção é fazer esse site utilizando o Mongodb + nodejs + vuejs.

 

Minha dúvida é com relação ao sistema de seguidores e curtidas. Seria viável desenvolver esse projeto utilizando o mongoDB ? Alguém pode me dar uma noção de qual seria a melhor maneira de organizar o esquema do banco de dados para tal finalidade ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcosvn

Retirado de pesquisa google: MongoDB é um software de banco de dados orientado a documentos livre, de código aberto e multiplataforma, escrito na linguagem C++. Classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON com esquemas...

 

Leia o links abaixo para saber qual Banco de Dados usar.

MySQL vs SQL Server vs MongoDB vs PostgreSql

 

Eu apenas recomendo ter em mente a forma de como você ira construir sua aplicação sobre o Banco de Dados e você precisa levar em conta qual Banco de Dados possui mais informações na internet para soluções de dúvidas e problemas pois isso facilita e muito sua construção quando você encontrar uma barreira, qual tem melhor Custo Beneficio e qual ira responder melhor a sua aplicação.

 

Eu uso o MySQL com PHP  com ASP e com Java e no meu trabalho uso DB2 com COBOL e Java.

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço a intenção mas realmente não me ajudou. Eu preciso de uma opinião no sentindo de me explicar se é viável produzir um site para publicação de textos que envolve sistema de curtidas e seguidores através do mongoDB.

 

Pelo que eu sei, o pessoal não costuma aconselhar a utilização do mongoDB quando existem muitos JOINS e relacionamentos entre tabelas. Mas não sei qual o limite desse muitos. Por isso eu preciso de alguem que trabalhe com mongodb para me dar essa luz.

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo problema algum, no mongo você trabalha com referencias ou documentos embutidos.

Se precisar juntar varias collections use o operador de agregação $lookup "disponível a partir da v3.2"

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Williams Duarte disse:

Não vejo problema algum, no mongo você trabalha com referencias ou documentos embutidos.

Se precisar juntar varias collections use o operador de agregação $lookup "disponível a partir da v3.2"

 

 

Obrigado William, era bem essa ideia q eu precisava. Mas vamos supor que um usuario siga uns 10 mil escritores, na hora de listar os usuarios q este membro segue o desempenho seria melhor que o mysql ?

 

Eu estou pensando em seguir essa estrutura:

1. Coleção users:
- userid
- username
- userpass

2. Coleção Seguindo:
- userid
- [array Userid]


3. Coleção Seguido:
- userid
- [array Userid]

 

O que acha desse esquema ? Me parece funcional, mas na prática ele funcionaria bem ?

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora, mongodb por ser um banco NoSql, sempre sera mais rápido que os relacionais. 

Devido o mongodb, nao ser tão rigido, você faz qualquer coisa!

 

Agora, ele trás qualquer coisa rapidamente, desde que esteja com os indicies criados corretamente.

 

Em 02/08/2019 at 15:02, Marcosvn disse:

Eu estou pensando em seguir essa estrutura:


1. Coleção users:
- userid
- username
- userpass

2. Coleção Seguindo:
- userid
- [array Userid]


3. Coleção Seguido:
- userid
- [array Userid]

 


Acredito ser a melhor opção, é esta forma acima!

 


Outra maneira, mas seria incorporando no documento de usuario. Desta forma teria uma unica colection.

{
    "_id":"60gd8nb530043e3c569af288", 
    "name":"William Duarte", 
    "follower"["30fd6bb530043e3c569af283","30fd6bb530043e3c669af283","30fd6bb530043e3c569af283"],
    "following":["40fd6bb530043e3c569af286","49fd6bb530043e3c566af45o"]
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 15/08/2019 at 14:12, Williams Duarte disse:

 


{
    "_id":"60gd8nb530043e3c569af288", 
    "name":"William Duarte", 
    "follower"["30fd6bb530043e3c569af283","30fd6bb530043e3c669af283","30fd6bb530043e3c569af283"],
    "following":["40fd6bb530043e3c569af286","49fd6bb530043e3c566af45o"]
}

 

 

Essa maneira que vce mencionou me parece bem mais adequado. Vou fazer nesse esquema. Muito obrigado pela força.

 

Abraço

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só me tira mais uma dúvida. Supondo que meus documentos no mongodb irão armazenar informação de seguidores, comentários e likes, em um dado momento eu não poderia atingir o limite de 16mb por tamanho de documento? Numa hipotese onde possa existir milhoes de seguidores, curtidas e comentários, qual seria a melhor abordagem para não correr esse risco ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que sim, mas comentarios e likes estaria relacionado a outras colecções e não a uma collection Person por exemplo.

Sobre comentários de uma lida aqui

 

Mas seu exemplo seria bem melhor, ai usa
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

Teria consitencia dos dados, e a nova versão do mongo:latest da suporte a varias operações existentes em banco relacionais, como por exemplo Transações, que antes era inexistente, nas <= 3.*, e joins é moleza!

https://docs.mongodb.com/manual/core/transactions/
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Ferdz-Agencia-Digital
      @Matheus Tavares
       
      Estou montando uma API para usar com BD MySQL, mas futuramente migraremos o BD para MongoDB... deverei mudar muitas coisas da API ? Terei muito retrabalho ?
       
      O que acontece é que o projeto já existe e atualmente o BD é em MySQL e APIs em PHP... mas o projeto será migrado para a stack  MERN (MongoDB, Express, React e Node).
       
      A questão não é só performance, mas sim poder modernização pois o projeto irá se expandir precisa ser melhor escalável e a STACK será todo refeita, como disse acima, será usada MERN.
    • Por FerdzFernando
      Estou montando uma API para usar com BD MySQL, mas futuramente migraremos o BD para MongoDB... deverei mudar muitas coisas da API ? Terei muito retrabalho ?
       
      O que acontece é que o projeto já existe e atualmente o BD é em MySQL e APIs em PHP... mas o projeto será migrado para a stack  MERN (MongoDB, Express, React e Node)
    • Por gugacdb
      Gostaria de uma ajuda com uma questão relacionada ao nodejs.
       
      Estou tentando salvar informações que recebo de um arquivo local json ao banco de dados.
       
      esse arquivo me traz varias objetos, e o que preciso fazer é salvar objeto por objeto exemplo:
       
      let pessoa = [ {nome : 'Fulano1' , sobrenome : 'Beltrano1', idade : 80} {nome : 'Fulano2' , sobrenome : 'Beltrano2', idade : 90} {nome : 'Fulano3' , sobrenome : 'Beltrano3', idade : 100} ]  
      Estou realizando um laço para salvar cada volta, pois preciso inferir uma data em cada objeto.

      Estou tentando salvar utilizado o:
       
      do{}while(i > contador) Código que estou tentando usar:
       
      setUm = async (req, res, next) => { fs.readFile('./public/assets/images/data_dragon/pt_br/data/set1-pt_br.json' , 'utf8' , function(err , data ){ if(err){ return console.log('erro ao ler o arquivo'); } let jsonData = JSON.parse(data); let counter = jsonData.length; let i = -1; do{ i = i + 1; let dataSave = { associatedCards : jsonData[i].assets, associatedCardRefs : jsonData[i].associatedCardRefs, assets : jsonData[i].assets, region : jsonData[i].region, egionRef : jsonData[i].regionRef, attack : jsonData[i].attack, cost : jsonData[i].cost, health : jsonData[i].health, description : jsonData[i].description, descriptionRaw : jsonData[i].descriptionRaw, levelupDescription : jsonData[i].levelupDescription, levelupDescriptionRaw : jsonData[i].levelupDescriptionRaw, flavorText : jsonData[i].flavorText, artistName : jsonData[i].artistName, name : jsonData[i].name, cardCode : jsonData[i].cardCode, keywords : jsonData[i].keywords, keywordRefs : jsonData[i].keywordRefs , spellSpeed : jsonData[i].spellSpeed, spellSpeedRef : jsonData[i].spellSpeedRef, rarity : jsonData[i].rarity, rarityRef : jsonData[i].rarityRef, subtype : jsonData[i].subtype, subtypes : jsonData[i].subtypes, supertype : jsonData[i].supertype, type : jsonData[i].type, collectible : jsonData[i].collectible, set : jsonData[i].set, } const infosave = new Infocard(dataSave); try{ infosave.save(); }catch (e) { console.error('ROLOU ALGO DE ERRADO: '+ e.message); } }while(i < counter); res.json(dataSave); }); }  Abaixo meu model:
       
      const Infocard = new mongoose.Schema( { associatedCards : [String], associatedCardRefs : [String], assets : [String], region : String, regionRef : String, attack : Number, cost : Number, health : Number, description : String, descriptionRaw : String, levelupDescription : String, levelupDescriptionRaw : String, flavorText : String, artistName : String, name : String, cardCode : String, keywords : [String], keywordRefs : [String], spellSpeed : String, spellSpeedRef : String, rarity : String, rarityRef : String, subtype : String, subtypes : [String], supertype : String, type : String, collectible : Boolean, set : String, },{ timestamps : {createdAt : 'created_at'} } );
       
      Porem não estou obtendo sucesso. Quando chamo
      res.json(jsonData) o json carrega normalmente no navegador com todas as informações, porém quando vou tentar salvar no banco de dados os itens chegam vazios

      Ideias são apreciadas.

      Obrigado!
    • Por SampaioK12
      Eai Galera iniciando na área..
       
      Alguém sabe me explicar porque a Maioria das aplicações do Node Js são feitas com o Mongo(NoSQL)?..
       
      Todas as pesquisas que fiz referencia o NodeJS com o Mongo...
    • Por AlessandroAOM
      Pessoal estou implementando uma classe em JS usando o Nodejs e estou recebendo  a mensagem "TypeError: categoriasDAO.inserirCategoria is not a function"
       
      o arquivo da classe segue
      //Categoria DAO function categoriasDAO(connection){     this._connection = connection(); } categoriasDAO.prototype.inserirCategoria = function(categoria){     this._connection.open(function(err, mongoclient){         mongoclient.collection("categorias", function(err, collection){             collection.insert(categoria);             mongoclient.close();         });     }); } module.exports = function(){     return categoriasDAO; } eu estou chamando ela no arquivo server.js apenas para testar  o procedimento.
      'use strict' require('dotenv').config() const express = require('express'); const path = require('path'); const app = express(); var cookieParser = require('cookie-parser');  const session = require('express-session') const bodyParser = require('body-parser'); const sessionStore = require('./config/promiseConnection'); const connection = require('./config/dbConnection'); var categoriasDAO = require('./models/categoriasDAO'); categoriasDAO = new categoriasDAO(connection); console.log(categoriasDAO) ; categoriasDAO.inserirCategoria({categ: "Nova",                                 descricao : "Nova categoria" }                            ); quando ele vai executar a ultima linha acima ele gera a mensagem de erro.
      C:\Users\Alessandro.Oliveira\Documents\VsStudio\Nodejs\novopassportestudar\server.js:14 categoriasDAO.inserirCategoria({categ: "Nova",               ^ TypeError: categoriasDAO.inserirCategoria is not a function  
      O que estou fazendo de errado ou o que falta fazer?
       
      Obrigado!
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.