Resumo : neste tutorial, você aprenderá como usar ARCHIVE
o 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 ARCHIVE
mecanismo 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 ARCHIVE
mecanismo 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 ARCHIVE
armazenamento está disponível, você pode usar a SHOW
ENGINES
instruçã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 ARCHIVE
mecanismo de armazenamento, defina a ENGINE
cláusula ARCHIVE
da seguinte forma:
CREATE TABLE table_name(
column_list
) ENGINE=ARCHIVE;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Ao criar uma ARCHIVE
tabela, o mecanismo de armazenamento gera arquivos com o mesmo nome da tabela.
Ao trabalhar com ARCHIVE
tabelas, você pode executar INSERT
, REPLACE
, e SELECT
, mas não DELETE
ou UPDATE
. Além disso, você pode classificar as linhas usando a ORDER
BY
cláusula.
Na ARCHIVE
tabela, você pode usar a AUTO_INCREMENT
coluna. A AUTO_INCREMENT
coluna 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_INCREMENT
coluna para as ARCHIVE
tabelas, 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 ARCHIVE
tabela, o mecanismo de armazenamento a compacta usando a compactação de dados sem perdas Zlib ( zlib.net
).
À medida que você recupera dados de uma ARCHIVE
tabela, 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 ARCHIVE
tabela que armazena dados das tabelas do banco de dados de exemplo .
Primeiro, crie uma ARCHIVE
tabela chamada sales
que armazene dados das tabelas orders
, orderdetails
, products
e :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 sales
tabela a partir das tabelas orders
, orderdetails
, customers
e :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 2996
linhas na ARCHIVE
tabela de vendas.
Terceiro, tente excluir da sales
tabela:
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 option
Linguagem de código: texto simples ( texto simples )
Isso ocorre porque a ARCHIVE
tabela não oferece suporte à DELETE
operação.
Resumo
- Use o MySQL
ARCHIVE
para armazenar grandes quantidades de dados em um espaço muito pequeno.