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 / 190756
Accepted
dbdemon
dbdemon
Asked: 2017-11-14 03:24:40 +0800 CST2017-11-14 03:24:40 +0800 CST 2017-11-14 03:24:40 +0800 CST

Qual é a solução ideal para armazenar séries temporais em tempo real no MariaDB / MySQL?

  • 772

Caso de uso: uma medição cria um determinado número de imagens. Para cada imagem precisamos armazenar um pequeno conjunto de indicadores de qualidade (floats, doubles) junto com um inteiro de imagem [1 ...N], um timestamp e um ou dois valores de chave estrangeira. Isso deve ser plotado em "tempo real" em um aplicativo da Web (PHP) para que os usuários avaliem.

Cada cliente da Web pesquisa o banco de dados a cada 5 segundos. Armazenamento + recuperação de cada conjunto de indicadores de qualidade deve, idealmente, levar < 2s (aproximadamente). Na pior das hipóteses, pode haver cerca de 30 clientes web simultâneos pesquisando e cerca de 10 medições podem ser gravadas simultaneamente, levando a rajadas de gravação de aprox. 1000 conjuntos de indicadores de qualidade por segundo.

Em uma linguagem de programação, esse tipo de dado provavelmente seria armazenado em arrays ou listas. Como não tenho conhecimento de nada parecido no mundo MariaDB/MySQL estou apenas usando uma tabela normal do InnoDB com uma coluna para cada um dos valores citados acima. Isso já tem mais de 90 milhões de linhas e deve crescer mais rapidamente nos próximos meses.

O InnoDB em geral é o melhor mecanismo de armazenamento para isso ou devo considerar outros? É uma prática recomendada arquivar os dados depois de um tempo, talvez depois que todas as imagens das medições forem processadas? Isso ajudaria a habilitar a compactação ou isso teria impactos muito negativos no desempenho?

mysql mariadb
  • 2 2 respostas
  • 14871 Views

2 respostas

  • Voted
  1. Best Answer
    Rick James
    2017-11-14T06:17:30+08:002017-11-14T06:17:30+08:00

    Com apenas MySQL/MariaDB, eu empregaria:

    • Ingestão de alta velocidade: http://mysql.rjweb.org/doc.php/staging_table
    • Tabelas de resumo (para tornar a busca de dados muito mais rápida): http://mysql.rjweb.org/doc.php/summarytables
    • Eu até consideraria não armazenar os dados brutos; em vez disso, resuma os dados e, em seguida, jogue-os fora. Se isso for prático, evita a maioria das perguntas que você faz.
    • (Se os dados precisarem de limpeza): Exclusão rápida de dados antigos: http://mysql.rjweb.org/doc.php/partitionmaint
    • Eu evitaria FOREIGN KEYSpor causa da sobrecarga extra. (Em vez disso, eu depuraria o SQL.)
    • Eu não usaria chaves UUID; desempenho degenera terrivelmente em tabelas enormes. ( http://mysql.rjweb.org/doc.php/uuid )
    • Eu evitaria índices extras - Não use AUTO_INCREMENTse alguma outra coluna for exclusiva.
    • Você mencionou Espacial -- Por favor, elabore. As pesquisas 2D são complicadas; SPATIALé uma abordagem; aqui está outro: http://mysql.rjweb.org/doc.php/latlng

    Seu último parágrafo joga na pia da cozinha de perguntas (Toku, MyRocks, arquivo, compressão, tabela de histórico). Estou surpreso que a postagem não tenha sido morta por ser "muito ampla". Por favor, explique como são seus dados e consultas; caso contrário, tudo o que podemos fazer é jogar uma pia de cozinha cheia de soluções.

    Você diz "tempo real", mas precisa de "milhares/seg". Você pode permitir um atraso de 1 minuto em tempo real? 1 segundo? Você não pode obter 1ms; 1s será difícil de alcançar. Quanto tempo dura uma explosão? O que é uma explosão por minuto? 1 K/s provavelmente será derramado nos próximos segundos. 6K/minuto não é muito problema.

    Quantos clientes estão armazenando dados? Algumas soluções funcionam bem com um único cliente; soluções diferentes são necessárias para vários clientes.

    Tenha em mente que os benchmarks são ajustados para mostrar uma coisa e raramente correspondem à vida real.

    • 13
  2. greenweeds
    2017-11-14T04:10:35+08:002017-11-14T04:10:35+08:00

    Existem algumas grandes questões lá que provavelmente precisam de um exame mais detalhado do que pode ser alcançado aqui, pois há tantas dependências (perceba que você sabe disso!). Há vários conjuntos de slides de apresentações nas páginas Percona Live e Percona Live Europe sobre séries temporais que podem ajudá-lo a avançar mais. Por exemplo, sobre como usar o ClickHouse do Yandex

    https://www.percona.com/live/17/program/schedule/time-series

    https://www.percona.com/live/e17/program-open-source-databases

    Você também pode achar algumas das postagens do blog interessantes. Este analisa TokuDB versus InnoDB para um benchmark de série temporal.

    https://www.percona.com/blog/2013/09/05/tokudb-vs-innodb-timeseries-insert-benchmark/

    Considerando que este analisa MongoDB e TokuMX https://www.percona.com/blog/2015/05/26/storing-time-series-data-with-mongodb-and-tokumx/

    Espero que estes ajudem.

    • 4

relate perguntas

  • 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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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