MySQL ARCHIVE Storage Engine

Resumo : neste tutorial, você aprenderá como usar ARCHIVEo mecanismo de armazenamento MySQL para armazenar grandes quantidades de dados com um espaço ocupado muito pequeno.

Introdução ao mecanismo de armazenamento MySQL ARCHIVE

O ARCHIVEmecanismo de armazenamento permite criar tabelas que podem armazenar grandes quantidades de dados não indexados com uso mínimo de espaço de armazenamento.

O ARCHIVEmecanismo de armazenamento pode conseguir isso não criando índices tradicionais e usando técnicas de compactação para reduzir a quantidade de espaço necessária para armazenar os dados.

Para verificar se o ARCHIVEarmazenamento está disponível, você pode usar a SHOW ENGINESinstrução a seguir:

SHOW ENGINES;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ndbinfo            | NO      | MySQL Cluster system information storage engine                | NULL         | NULL | NULL       |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| ndbcluster         | NO      | Clustered, fault-tolerant tables                               | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Para criar uma tabela que usa o ARCHIVEmecanismo de armazenamento, defina a ENGINEcláusula ARCHIVEda seguinte forma:

CREATE TABLE table_name(
   column_list
) ENGINE=ARCHIVE;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ao criar uma ARCHIVEtabela, o mecanismo de armazenamento gera arquivos com o mesmo nome da tabela.

Ao trabalhar com ARCHIVEtabelas, você pode executar INSERT, REPLACE, e SELECT, mas não DELETEou UPDATE. Além disso, você pode classificar as linhas usando a ORDER BYcláusula.

Na ARCHIVEtabela, você pode usar a AUTO_INCREMENTcoluna. A AUTO_INCREMENTcoluna pode ter um índice exclusivo ou não exclusivo. Se você tentar criar um índice em qualquer outra coluna, receberá um erro.

Embora seja possível usar a AUTO_INCREMENTcoluna para as ARCHIVEtabelas, não é possível inserir um valor na coluna que seja menor que o valor máximo atual da coluna. Se você tentar fazer isso, receberá um erro.

Quando você insere uma linha em uma ARCHIVEtabela, o mecanismo de armazenamento a compacta usando a compactação de dados sem perdas Zlib ( zlib.net).

À medida que você recupera dados de uma ARCHIVEtabela, o mecanismo de armazenamento descompacta as linhas sob demanda. Além disso, ele executa uma varredura completa da tabela porque não oferece suporte a cache de linha.

Exemplo de mecanismo de armazenamento MySQL ARCHIVE

Criaremos uma ARCHIVEtabela que armazena dados das tabelas do banco de dados de exemplo .

Primeiro, crie uma ARCHIVEtabela chamada salesque armazene dados das tabelas orders, orderdetails, productse :customers

CREATE TABLE sales(
  orderNumber INT NOT NULL, 
  orderDate DATE, 
  requiredDate DATE, 
  status VARCHAR(15), 
  productCode VARCHAR(15) NOT NULL, 
  quantityOrdered INT NOT NULL, 
  priceEach DECIMAL(10, 2) NOT NULL, 
  orderLineNumber SMALLINT NOT NULL, 
  productName VARCHAR(70) NOT NULL, 
  productline VARCHAR(50) NOT NULL, 
  buyPrice DECIMAL(10, 2) NOT NULL, 
  msrp DECIMAL(10, 2) NOT NULL, 
  customerNumber INT NOT NULL, 
  customerName VARCHAR(50) NOT NULL, 
  phone VARCHAR(50) NOT NULL, 
  addressLine1 VARCHAR(50) NOT NULL, 
  addressLine2 VARCHAR(50), 
  city VARCHAR(50) NOT NULL, 
  state VARCHAR(50), 
  country VARCHAR(50) NOT NULL
) ENGINE = ARCHIVE;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira dados na salestabela a partir das tabelas orders, orderdetails, customerse :products

INSERT INTO sales 
SELECT 
  o.orderNumber, 
  o.orderDate, 
  o.requiredDate, 
  o.status, 
  d.productCode, 
  d.quantityOrdered, 
  d.priceEach, 
  d.orderLineNumber, 
  p.productName, 
  p.productline, 
  p.buyPrice, 
  p.msrp, 
  c.customerNumber, 
  c.customerName, 
  c.phone, 
  c.addressLine1, 
  c.addressLine2, 
  c.city, 
  c.state, 
  c.country 
FROM 
  orders o 
  INNER JOIN orderDetails d using (orderNumber) 
  INNER JOIN products p using (productCode) 
  INNER JOIN customers c using (customerNumber);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A consulta insere 2996linhas na ARCHIVEtabela de vendas.

Terceiro, tente excluir da salestabela:

DELETE FROM 
  sales 
WHERE 
  orderNumber = '10100';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

MySQL emite o seguinte erro:

ERROR 1031 (HY000): Table storage engine for 'sales' doesn't have this optionLinguagem de código:  texto simples  ( texto simples )

Isso ocorre porque a ARCHIVEtabela não oferece suporte à DELETEoperação.

Resumo

  • Use o MySQL ARCHIVEpara armazenar grandes quantidades de dados em um espaço muito pequeno.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *