Por que tabelas de BD tem limite de tamanho? Alguém sabe?

Pessoal, existe um BD que permita criar tabelas de tamanho ilimitado?

Eu já andei pesquisando, no postgre e o mysql não dá.
Tô indignado aqui (:D), no MySQL, qualquer tabela que possua mais de 1GB de tamanho é dividida em partes de 1GB cada, certo? Então por que não é possível criar tabelas de tamanho ilimitado (esquecendo o limite de hardware) se é só ir dividindo? Porque tem uma hora que ele para de dividir?

Sei que alguns vão dizer que é por causa que o arquivo que guarda os nomes das tabelas divididas fica muito grande (e o sistema de arquivos do SO não suporta maior) daí ele para de dividir, mas então por que não dividir o arquivo com os nomes das tabelas divididas?

Sei que eu tô meio chato, mas será que ninguém nunca pensou nisso? Teoricamente, não é nada impossível de fazer.

Alguém sabe o real motivo para que as tabelas dos BD tenham limite de tamanho?

OBS: não estou querendo que as tabelas por padrão sejam ilimitadas (pois sei que poucas pessoas hoje precisam de tabelas maiores do que as existentes, sem falar na performance muito baixa que teriam), mas uma opção extra para criar uma tabela dessas iria deixar o mundo melhor (:D). Fica a dúvida.

vlw galera :thumbup:

Um chute? Melhor desempenho

Quanto ao postgresql, dei uma pesquisada no faq da documentação (ver abaixo) e vemos que:

1 - Tudo depende do espaço livre do HD e memória.
2 - O tamanho máximo de cada tabela é 32TB. Porém, caso necessário, o mesmo pode ser expandido através de particionamento de tabela ou do tamanho do bloco de dados. (acho que com isso, você consegue sua tabela ilimitada)
3 - A notícia ruim, qualquer coisa acima do tamanho padrão pode afetar o desempenho (acho que isso responde a pergunta deste tópico)
4 - É bom lembrar, que isso independe do tamanho maximo de arquivos do sistema operacional. Alguém pode perguntar: “Uau 32TB? e o windows suporta um arquivo deste tamanho?” Claro que não, na verdade o SGBD faz com que cada tabela seja formada por um conjunto arquivos, onde cada um, por default, tem um 01GB de tamanho, a medida que a tabela cresce, mais arquivos são criados. Isto, obviamente, é transparente pro usuário.

Venom

[quote]
" What is the maximum size for a row, a table, and a database?

These are the limits:

Maximum size for a database? unlimited (32 TB databases exist)
Maximum size for a table? 32 TB
Maximum size for a row? 400 GB
Maximum size for a field? 1 GB
Maximum number of rows in a table? unlimited
Maximum number of columns in a table? 250-1600 depending on column types
Maximum number of indexes on a table? unlimited

Of course, these are not actually unlimited, but limited to available disk space and memory/swap space. Performance may suffer when these values get unusually large.

The maximum table size of 32 TB does not require large file support from the operating system. Large tables are stored as multiple 1 GB files so file system size limits are not important.

The maximum table size, row size, and maximum number of columns can be quadrupled by increasing the default block size to 32k. The maximum table size can also be increased using table partitioning.

One limitation is that indexes can not be created on columns longer than about 2,000 characters. Fortunately, such indexes are rarely needed. Uniqueness is best guaranteed by a function index of an MD5 hash of the long column, and full text indexing allows for searching of words within the column. "
Fonte: http://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F[/quote]

[quote=venomtotal]Quanto ao postgresql, dei uma pesquisada no faq da documentação (ver abaixo) e vemos que:

1 - Tudo depende do espaço livre do HD e memória.
2 - O tamanho máximo de cada tabela é 32TB. Porém, caso necessário, o mesmo pode ser expandido através de particionamento de tabela ou do tamanho do bloco de dados. (acho que com isso, você consegue sua tabela ilimitada)
3 - A notícia ruim, qualquer coisa acima do tamanho padrão pode afetar o desempenho (acho que isso responde a pergunta deste tópico)
4 - É bom lembrar, que isso independe do tamanho maximo de arquivos do sistema operacional. Alguém pode perguntar: “Uau 32TB? e o windows suporta um arquivo deste tamanho?” Claro que não, na verdade o SGBD faz com que cada tabela seja formada por um conjunto arquivos, onde cada um, por default, tem um 01GB de tamanho, a medida que a tabela cresce, mais arquivos são criados. Isto, obviamente, é transparente pro usuário.

Venom

[/quote]

OK, já havia lido sobre o particionamento de tabelas, mas existe 2 poréns nisso:

1º - O postgres não cria tabelas automaticamente, você pode sim criar um tabela de tamanho “ilimitado” fazendo isso, mas você mesmo vai ter que criar as tabelas. Mas acredito que isso não seja um problema, só não é produtivo, mas pode ser feito sem problemas.

2º - Para que os dados da tabela mãe sejam divididos entre as tabelas filhas, é necessário uma expressão regular para dizer qual dado vai para cada tabela (pelo menos foi isso que eu lí). Imagine agora que você tem um tabela com 2 campos INTEGER. Você quer dividir seus dados entre as tabelas filhas. Como você faria a expressão regular?
Você poderia tentar algo assim:
Se for de 1 a 100, vai pra primeira tabela
Se for de 101 a 200 vai pra segunda

Mas vai que, por acaso, tua tabela só tenha dados de 1 a 100. Vai dar erro certo? Pois todos os dados vão ir para a primeira tabela.

Mesma coisa poderia acontecer com nomes, vai que a maioria começa com a letra A, por exemplo.
Dá pra fazer, mas tem alguns poréns que deixam chances de erros.

A menos que exista alguma maneira para dividir sem usar expressões regulares e eu não saiba.
Você sabe se isso é possível?

Só outra pergunta:
Até que tamanho o postgre (ou outro que você conheça) faz auto-incremento? Ou seja, qual é o tamanho máximo de um número que seja do tipo auto-incremento?

vlw :thumbup:

Por que tabelas de BD tem limite de tamanho? Provavelmente porque os algoritmos que este tipo de tabela implementa não funcionam tão bem fora desse limite, seja qual for o motivo. Pode ser uma limitação interna, tipo vc tem uma variavel de tamanho X para armazenar endereços e o total equivale a X GB de informação OU a partir desse valor vc tem uma queda de performance consideravel – ou uma perca de confiabilidade!