# Grid file

In computer science, a grid file or bucket grid is a point access method which splits a space into a non-periodic grid where one or more cells of the grid refer to a small set of points. Grid files (a symmetric data structure) provide an efficient method of storing these indexes on disk to perform complex data lookups.
It provides a grid of n-dimensions where n represents how many keys can be used to reference a single point.
Grid files do not contain any data themselves but instead contain references to the correct bucket.

## Uses

A grid file is usually used in cases where a single value can be referenced by multiple keys.
A grid file began being used because "traditional file structures that provide multikey access to records, for example, inverted files, are extensions of file structures originally designed for single-key access. They manifest various deficiencies in particular for multikey access to highly dynamic files."
In a traditional single dimensional data structure (e.g. hash), a search on a single criterion is usually very simple but searching for a second criterion can be much more complex.
Grid files represent a special kind of hashing, where the traditional hash is replaced by a grid directory.

## Examples
### Census database

Sources:
Consider a database containing data from a census. A single record represents a single household, and all records are grouped into buckets. All records in a bucket can be indexed by either their city (which is the same for all records in the bucket), and the streets in that city whose names begin with the same letter.
A grid file can be used to provide an efficient index for this structure, where records come in groupings of 26, each of them relating to street names in a city starting with one of the letters of the alphabet. This structure can be thought of as an array, table, or grid with two dimensions which we will call the x and y axes.
One may consider the x-axis to be the city and the y-axis to be each of the letters in the alphabet, or alternatively, the first letter of each street.
Each record in this structure is known as a cell. Each cell will contain a pointer to the appropriate bucket in the database where the actual data is stored. An extra cell, or record header, may be required to store the name of the city. Other cells grouped with it will only need to contain the pointer to their respective bucket, since the first cell corresponds to street names beginning with "A", the second to "B", and so on.
The database can be further extended to contain a continent field to expand the census to other continents. This would cause records in the same bucket to correspond to households on a street beginning with the same letter, in the same city, in the same continent.
The cells in the grid file would then consist of a city header, and six (one for each continent, not including Antarctica) groupings of 26 cells relating to the streets with the same starting letter, in the same city, on the same continent and could now be thought of as a three-dimensional array.

## Advantages

Since a single entry in the grid file contains pointers to all records indexed by the specified keys:
* No special computations are required
* Only the right records are retrieved
* Can also be used for single search key queries
* Easy to extend to queries on n search keys
* Significant improvement in processing time for multiple-key queries
* Has a two-disk-access upper bound for accessing data.

## Disadvantages

However, because of the nature of the grid file, which gives it its advantages, there are also some disadvantages:
* Imposes space overhead
* Performance overhead on insertion and deletion

## Related data structures

* Multilayer grid file
* Twin grid files
* BANG file