Javafree
Página Inicial do Fórum > Design Patterns, UML e Arquitetura

Clusterizacao de um ArrayList



Criar novo tópico   Responder tópico
  1. Comment Arrow

    Publicado em: 28/02/2012 15:25:32

    Ola,

    Eu tenho no meu sistema um ArrayList "gigante", hoje ele ocupa 2GB de memoria. Conforme o passar do tempo ele crescerá ainda mais.

    Existe alguma forma de colocar esse arraylist em um cluster fazendo um escalonamento horizontal. Ou seja, programar de tal maneira q se ele vier a crescer muito eu apenas adicionaria mais uma maquina no cluster.

    Agradeço a ajuda de todos!



  1. ryuuji
    Posts:1116


    Comment Arrow

    Publicado em: 28/02/2012 15:34:58

    [quote="felipe.regalgo"]Ola,

    Eu tenho no meu sistema um ArrayList "gigante", hoje ele ocupa 2GB de memoria. Conforme o passar do tempo ele crescerá ainda mais.

    Existe alguma forma de colocar esse arraylist em um cluster fazendo um escalonamento horizontal. Ou seja, programar de tal maneira q se ele vier a crescer muito eu apenas adicionaria mais uma maquina no cluster.

    Agradeço a ajuda de todos!



    Sei que não é da minha conta, mas por que um ArrayList tããããão imenso?
    Só estou curioso mesmo, nunca mexi com clusters, mas talvez ajude o pessoal ter mais informações.
    _________________



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 28/02/2012 15:35:13

    Vish!!!

    uma ArrayList de 2 GB!!!!!
    Poww...

    há necessidade disso? Usa um banco de dados cara!
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.

  1. Comment Arrow

    Publicado em: 28/02/2012 16:05:03

    Entao estou fazendo uma rede social e todos os usuarios do sistema e seus relacionamentos ficarão na memoria.

    Claro q os dados completp do Usuario ficarão no banco de dados em uma base NO-SQL porém uma versao mais simplificada do Usuario (contendo ID, Nome, Idade) ficará em memoria para facilitar a programação e aumentar a performance do sistema



  1. rafael.sarti
    Posts:12


    Comment Arrow

    Publicado em: 28/02/2012 16:18:45



    beleza.. pra colocar todos os dados na memória você já teve a genial ideia de comprar um data center tipo assim do facebook.....

    compra do Orkut que o preço deve tá em baixa já que tá falindo....

    acordaaaa o fiote.. array de 2 gb vc injeta alguma coisa muito loca direto no coração.
    _________________

    Os políticos são como as fraldas, devem ser trocados constantemente. E sempre pelo mesmo motivo.



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 28/02/2012 16:23:33

    Aumentar o numero de dados na memória para aumentar a performance? Isso é incoerente!

    Na memória só devem ficar os dados essenciais, ou um buffer dos dados requisitados.

    Quanto mais memória um programa desperdiça, menor é a performace dele. Ao invéz de carregar essa quantidade absurda de dados, o correto seria carrega-los do banco de dados sob demanda.
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.



  1. rafael.sarti
    Posts:12


    Comment Arrow

    Publicado em: 28/02/2012 16:24:50

    Acabei de fazer uma conta aqui para medir a o tamanho da bomba....

    Um servidor com 32gb dedicado.. custa em média R$36.000,00
    32gb dividido por 2gb por usuário = 16 usuários conectados !

    para manter 500 usuários simultaneos online... precisaria de 32 servidores interligados... investimento inicial de R$1.152.000,00 para comportar essa bomba que vc quer fazer.
    _________________

    Os políticos são como as fraldas, devem ser trocados constantemente. E sempre pelo mesmo motivo.



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 28/02/2012 16:25:49

    [quote="rafael.sarti"]Acabei de fazer uma conta aqui para medir a o tamanho da bomba....

    Um servidor com 32gb dedicado.. custa em média R$36.000,00
    32gb dividido por 2gb por usuário = 16 usuários conectados !

    para manter 500 usuários simultaneos online... precisaria de 32 servidores interligados... investimento inicial de R$1.152.000,00 para comportar essa bomba que vc quer fazer.



    PQP!

    tudo isso pra quinhentos usuários??? Agora eu sei porque o orkut faliu.


    O dia que ele tiver que reiniciar o servidor, vai ter que ficar 2 dias esperando carregar os dados na ArrayList para iniciar o sistema.
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.



  1. rafael.sarti
    Posts:12


    Comment Arrow

    Publicado em: 28/02/2012 16:28:36

    Depois das brincadeiras, mais desculpa foi engraçado !

    Uma consulta simples leva em média 1ms, hoje as conexões de 10mb são comuns em residencias, empresas e etc. O povo quer sempre mais velocidade sempre.

    Então se fizer uma rede social leve, com requisições leves e etc seria mt interessante. O facebook possui milhares de servidores realizando processando de querys por isso é mt rapido, mais para o começo, não precisa ser o Facebook e nem o Mark.. hahaha
    _________________

    Os políticos são como as fraldas, devem ser trocados constantemente. E sempre pelo mesmo motivo.

  1. Comment Arrow

    Publicado em: 28/02/2012 16:37:08

    rs, essa lista de 2GB é um Arraylist "static" q será compartilhada por todos os usuarios (sessoes) do sistema
    nao é 2GB para cada usuario logado

    entao para ficar mais claro, todo o restante dos dados (conversas, mensagens, escolhas, etc) naturalmente ficarão em um banco de dados no-sql. Inclusive os usuarios tb ficarão no Banco.
    O q eu vou trazer para memoria é basicamente uma versao simplificada do usuario e todos seus relacionamentos. Isso vai me proporcionar um facilidade enorme de programacao e um acrescimo em performance tb MUITO alto.
    Imagino q cada usuario em memoria nao deve exceder 50 bytes cada um (ID, Idade, nome). Se vc pensar bem nao é uma solucao tao "louca" assim.

    Para vcs terem ideia, supondo q cada usuario ocupe na maximo 50 bytes posso ter até 43 milhoes de usaurios usando 2GB de memoria

    valeu
    []´s



  1. rafael.sarti
    Posts:12


    Comment Arrow

    Publicado em: 28/02/2012 16:40:29

    Olha é só vc inverte tudo isso... mensagens, conversas e etc.. vc joga na memoria pra facilitar o resto é tudo banco... num tem como vc montar uma rede social com array.

    algo está mt errado no seu projeto .
    _________________

    Os políticos são como as fraldas, devem ser trocados constantemente. E sempre pelo mesmo motivo.



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 28/02/2012 16:40:32

    Isso não é pior?

    Lembre-se que ArrayList não é thread-safe, ou seja, compartilhar uma ArrayList gigantesca, entre N usuários é mais do que pedir para travar o seu sistema, e estragar a integridade do seu banco.
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.



  1. ryuuji
    Posts:1116


    Comment Arrow

    Publicado em: 28/02/2012 16:45:58

    [quote="felipe.regalgo"]rs, essa lista de 2GB é um Arraylist "static" q será compartilhada por todos os usuarios (sessoes) do sistema
    nao é 2GB para cada usuario logado

    entao para ficar mais claro, todo o restante dos dados (conversas, mensagens, escolhas, etc) naturalmente ficarão em um banco de dados no-sql. Inclusive os usuarios tb ficarão no Banco.
    O q eu vou trazer para memoria é basicamente uma versao simplificada do usuario e todos seus relacionamentos. Isso vai me proporcionar um facilidade enorme de programacao e um acrescimo em performance tb MUITO alto.
    Imagino q cada usuario em memoria nao deve exceder 50 bytes cada um (ID, Idade, nome). Se vc pensar bem nao é uma solucao tao "louca" assim.

    Para vcs terem ideia, supondo q cada usuario ocupe na maximo 50 bytes posso ter até 43 milhoes de usaurios usando 2GB de memoria

    valeu
    []´s



    Até aí eu já tinha entendido. O que eu queria saber era para que EU, como um usuário do seu sistema, precisaria estar conectado aos outros 42.999.999 usuários quando eu só tenho 10 contatos.

    Acho que ficaria melhor para você só pegar os contatos relevantes para mim e deixá-los carregados na minha sessão:

    Imagine que os meus contatos tem mais 10 contatos cada, seriam uns 100 contatos certo? Imagine que cada um desses 100 tenha mais 10 contatos. Seriam duas "camadas" de contatos, totalizando 1000 contatos. Esses 1000 contatos seriam a minha "sessão de dados pré-carregados".

    Acho que fica bem melhor do que essa loucura de 2GB na memória. Imagine dar um SORT (usando um Bubble!) nessa coisa?

    Explode qualquer DataCenter fraquinho! XDDD
    _________________

  1. Comment Arrow

    Publicado em: 28/02/2012 17:44:41

    [quote="ryuuji"]
    Até aí eu já tinha entendido. O que eu queria saber era para que EU, como um usuário do seu sistema, precisaria estar conectado aos outros 42.999.999 usuários quando eu só tenho 10 contatos.



    No sistema terá um local chamado "sugestao" onde a cada 2 segundos aparece um usuario diferente. Seria um momento em q o site sugere novas amizades com base no perfil/interesses dos usuarios cadastrados.
    Porém nesse local "sugestao" terá uma sequencia de usuarios/sugestoes diferente para cada um.
    Por exemplo para um homem aparecerá essecialmente mulheres, e mulheres q moram perto dele, com idade parecida, etc

    Por isso q internamente cada usaurio logado (session) teria sua propria versao desse ArrayList "gigante" cada um ordenado a sua maneira conforme detecção de afinidade.
    Dessa maneira eu conseguiria mostrar na tela uma sequencia especifica de sugestoes para cada usuario.

    Nao sei se deu pra entender. é meio complicado de explicar



  1. ryuuji
    Posts:1116


    Comment Arrow

    Publicado em: 28/02/2012 18:04:04

    [quote="felipe.regalgo"][quote="ryuuji"]
    Até aí eu já tinha entendido. O que eu queria saber era para que EU, como um usuário do seu sistema, precisaria estar conectado aos outros 42.999.999 usuários quando eu só tenho 10 contatos.



    No sistema terá um local chamado "sugestao" onde a cada 2 segundos aparece um usuario diferente. Seria um momento em q o site sugere novas amizades com base no perfil/interesses dos usuarios cadastrados.
    Porém nesse local "sugestao" terá uma sequencia de usuarios/sugestoes diferente para cada um.
    Por exemplo para um homem aparecerá essecialmente mulheres, e mulheres q moram perto dele, com idade parecida, etc

    Por isso q internamente cada usaurio logado (session) teria sua propria versao desse ArrayList "gigante" cada um ordenado a sua maneira conforme detecção de afinidade.
    Dessa maneira eu conseguiria mostrar na tela uma sequencia especifica de sugestoes para cada usuario.

    Nao sei se deu pra entender. é meio complicado de explicar



    Não é complicado cara. Somos todos programadores aqui.
    O que estamos fazendo é dando sugestões do que achamos melhor. Se você não concorda, siga sua cabeça, sem problemas (nem ressentimentos).

    A opinião de todos que eu vi aqui é que isso que você quer fazer é impraticável e vai dar problema, mas se você acha que não, vai fundo cara. Pode ser que estejamos errados (erramos bemmmm pouco, mas às vezes acontece , brincadeira ok?).
    _________________

  1. Comment Arrow

    Publicado em: 28/02/2012 19:28:57

    entendi, tranquilo.
    De qualquer maneira se alguem souber como Clusterizar um arraylist me ajudaria.
    De repente os bancos de dados in memory pode ser q eles tenham como clusterizar e talvez seja um caminho.

    valeu
    []´s



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 29/02/2012 00:07:44

    A ideia de usar a ArrayList é impraticável, sério mesmo.
    Pode ser uma ótima solução teorica, mas na prática, é inviável.

    Sendo assim, você precisa buscar novas alternativas.

    Minha sugestão (baseada em uma busca parecida que eu tive que fazer aqui em um dos meus projetos) é uma query.

    Sim. faça uma query, que irá trazer todos os resultados que você quer.
    Mulheres, entre 20 e 25 anos, na mesma cidade que o usuário, etc etc.

    Essa query vai retornar todos os resultados possíveis. MAS, há um porém. Você não vai usar a query inteira, não. Você vai quebra-la de N linhas em N linhas, e fazer sucessivas queries. As informações antigas, já foram usadas, então, jogue fora para liberar espaço.

    É assim que funciona, não carrega-se tudo, só o mais importante, e depois que usar, jogue fora, mesmo que for usar de novo, O tempo que ele está inerte na memória, é memória desperdiçada. E acredite amigo, memória RAM é 1000 vezes mais valiosa do que 200 ciclos de processamento que você vai usar pra fazer uma query.

    [quote="felipe.regalgo"]
    Por exemplo para um homem aparecerá essecialmente mulheres, e mulheres q moram perto dele, com idade parecida, etc



    Isso ia fazer uma legião de namoradas enfurecidas com você por mostrar todas as menininhas que estão perto dele.
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.



  1. ryuuji
    Posts:1116


    Comment Arrow

    Publicado em: 29/02/2012 09:02:30

    [quote="sekkuar"]
    [...]

    [quote="felipe.regalgo"]
    Por exemplo para um homem aparecerá essecialmente mulheres, e mulheres q moram perto dele, com idade parecida, etc



    Isso ia fazer uma legião de namoradas enfurecidas com você por mostrar todas as menininhas que estão perto dele.



    Indeed.
    Muda isso para: Para os solteiros aparecem mais pessoas do sexo oposto.
    _________________

  1. Comment Arrow

    Publicado em: 29/02/2012 13:57:20

    Entendi,

    Vou tentar bolar uma maneira de fazer essa consulta no banco, pois se eu conseguir fazer isso e ficar performatico consigo ficar tranquilo independente de quanto o sistema crescer.

    Uma das dificuldades é q essa consulta deverá ser feita em uma base NO-SQL (provavelmente será no HBase), nao sei se vai ser tao simples assim.

    Acredito q uma das dificuldades do no-sql será o fato de:
    - as consultas serem feitas por chave-valor (e nao por uma serie de atributos)
    - acho q nem tem um order-by
    - Nao nem rownum (para trazer de 50 em 50).

    Resumindo: Como fazer uma consulta em uma base no-sql ordenando por afinidade e trazendo de 50 em 50? Ainda to estudando NO-SQL nao manjo muito



  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 29/02/2012 14:05:12

    Muda pra uma base SQL então!
    _________________

    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."

    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.



  1. Leandro Rocha
    Posts:129


    Comment Arrow

    Publicado em: 26/11/2012 15:44:43

    [quote="sekkuar"]Muda pra uma base SQL então!


    Junto com Hibernate então nem se fala... hehehe...
    Ai sim ele vai ver as coisas andarem...
    _________________

    [color=darkblue]>[/color]
    -
    Novo no fórum e quer postar o código fonte? De uma olhada: Tag CODE do fórum
    -
    "Compartilhe seu conhecimento..."

  1. Comment Arrow

    Publicado em: 10/02/2014 15:36:17

    Ola a todos

    Finalmente o sistema saiu, acabei seguindo o conselho de voces e utilizei o banco de dados para fazer esse controle e assim economizar a memoria

    Foram 2 anos de esforço junto com um amigo, esta nesse link aqui
    http://www.tecurti.com

    O sistema foi pro ar esse fds ja tem uma galera cadastrada, estou postando aqui para agradecer a ajuda de voces.
    Se quiserem criar um perfil no sistema fiquem a vontade, isso até vai ajudar bastante ainda mais nesse começo

    Abs



  1. Relacionados