# NoSQL database architecture

- In most cases, the data which is accessed is read-only

- It does not need to be (or it cannot be) updated
- If the data is updated at all, such changes are made infrequently, in batch mode

- Data structures "ad-hoc" that allow extremely fast retrieval
- Alguns produtos podem ser usados tanto para armazenamento permananente como temporário (cache)
- Hashing

- Idéia geral: Se eu possuo um universo de dados classificáveis por chave, posso:

- Criar um critério simples para dividir este universo em subconjuntos com base em alguma qualidade do domínio das chaves
- Saber em qual subconjunto procurar e colocar uma chave
- Gerenciar estes subconjuntos bem menores por algum método simples

- Para isso eu preciso:

- Saber quantos subconjuntos eu quero
- Criar uma regra de cálculo que me diga, dada uma chave, em qual subconjunto devo procurar pelos dados com esta chave (função de hashing()
- Possuir um índice que me permita encontrar o início do subconjunto certo, depois de calcular o hashing (tabela de hashing)
- Possuir uma ou um conjunto de estruturas de dados para os subconjuntos

- For large data sets, hashing is faster than searching on an index, because the data is retrieved in much fewer disk accesses (In most cases, only a single disk access is required).

Fontes:
  Estruturas de Dados (T.332) - Hashing, http://www.inf.ufsc.br, Prof. Dr. rer.nat. Aldo von Wangenheim
  Nonstandard Database Architectures, Prakash M. Nadkarni, http://ycmi.med.yale.edu