AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 3011
Accepted
Krishna Sankar
Krishna Sankar
Asked: 2011-05-29 09:16:08 +0800 CST2011-05-29 09:16:08 +0800 CST 2011-05-29 09:16:08 +0800 CST

Quais são as heurísticas de fragmentação para o MySQL - número de registros por tabela e número de tabelas por instância?

  • 772

Projetando um armazenamento de objeto para objetos ~10B e usando mySQL para armazenar metadados. Sabemos que precisamos fragmentar e estamos procurando heurísticas gerais para dimensionar. Agradeceria dicas e ouviria sobre os cálculos no verso do envelope que todos vocês usaram

mysql scalability
  • 3 3 respostas
  • 887 Views

3 respostas

  • Voted
  1. Rick James
    2011-06-01T14:27:20+08:002011-06-01T14:27:20+08:00

    A fragmentação de itens individuais não é muito difícil - você só precisa de uma camada para descobrir a qual máquina ir para obter o item.

    A fragmentação de algo que você precisa digitalizar ou pesquisar pode ser complicada. Você teria que entregar a consulta para cada máquina possível, deixá-los fazer a varredura/pesquisa, recuperar os resultados e juntá-los. GROUP BY, ORDER BY e LIMIT têm soluços. Você acaba fazendo algumas coisas tanto nas máquinas fragmentadas quanto no agregador central.

    Você mencionou o armazenamento de linhas de metadados de 10B. Isso soa como alguns TB. Isso é facilmente manuseado em uma única máquina hoje em dia. A tabela pode ser PARTICIONADA, mas não se apresse até entender o que PARTITION faz e o que não dá a você.

    Enquanto isso, seus "objetos" podem estar espalhados por dezenas, até milhares, de máquinas. Agora você tem mais dois problemas - saber onde procurar e lidar com travamentos.

    Saber onde procurar - um hash é simples, até que você precise de mais fragmentos. Ter uma "pesquisa" adiciona outra coluna aos metadados e talvez um índice. Prefiro um compromisso entre os dois.

    Crashes - com mil máquinas, você deve planejar uma morte a cada semana. Onde está o backup dele? Ou você tem outra cópia online? Duas cópias são seguras o suficiente? Todas as mil máquinas estão no mesmo local, correndo o risco de um único tsunami, tornado ou o que quer que seja?

    Oh, voltando ao verso do envelope -- 10B INSERTs, uma linha de cada vez, podem levar um ano para terminar. Considere LOAD DATA e/ou INSERTs em lote.

    INDEXANDO a tabela de metadados do monstro versus cache. Digamos que você tenha 5 índices diferentes de AUTO_INCREMENT ou CURRENT_TIMESTAMP - serão 5 acertos de disco aleatórios para atualizar os índices. Com terabytes de coisas, não há como armazená-las em cache de forma eficaz. Ops, agora você está limitado a cerca de 20 linhas inseridas por segundo, não importa como você faz os INSERTs. Com cerca de 30 milhões de segundos/ano, leva uma década para inserir suas 10 bilhões de linhas. Cuidado com a indexação! Adicionar striping de RAID ajuda em um pequeno fator. Os SSDs ($$$!) Ajudam talvez em um fator de talvez 5. (E seria difícil passar de 1 TB de SSDs em uma única máquina.)

    • 3
  2. Best Answer
    RolandoMySQLDBA
    2011-05-29T15:24:03+08:002011-05-29T15:24:03+08:00

    Essas URLs informarão sobre a opção de ponteiro de dados nas tabelas MyISAM.

    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_myisam_data_pointer_size

    http://dev.mysql.com/doc/refman/5.0/en/full-table.html

    De acordo com essas URLs, uma tabela MyISAM pode teoricamente ser

    256 TB (para myisam_data_pointer_size = 6 (padrão)
    65536 TB (para myisam_data_pointer_size = 7 (máximo)

    O maior espaço de tabela InnoDB é de 64 TB.

    A maior tabela individual pode ser de 64 TB se você habilitar innodb_file_per_table .

    Este URL fornecerá mais números no maior BLOB, TEXT, VARCHAR, VARBINARY, LONGTEXT e BLOBs para InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-file-space.html

    Clique aqui para Número Máximo de Colunas por Tabela

    Quanto ao número máximo de tabelas por banco de dados, isso depende do sistema operacional. Se houver limite para o número de arquivos em uma pasta em um determinado sistema operacional (vamos chamá-lo de OSFILEMAX), MAXTABLES é OSFILEMAX dividido por 3 (.frm, .MYD, .MYI) para tabelas MyISAM, MAXTABLES é OSFILEMAX por 2 (. frm, .ibd) se estiver usando InnoDB com innodb_file_per_table ativado e MAXTABLES é OSFILEMAX (.frm) se estiver usando InnoDB com innodb_file_per_table desativado.

    Espero que essas URLs e outras respostas fornecidas ajudem você !!!

    • 1
  3. Liran Zelkha
    2011-06-11T08:02:25+08:002011-06-11T08:02:25+08:00

    Se você estiver interessado em sharding, confira http://www.scalebase.com - eles fornecem uma solução de sharding transparente e também podem recomendar a política de sharding correta para você

    • 0

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve