Keyspace (distributed data store)
A keyspace (or key space) in a NoSQL data store is an object that holds together all column families of a design.[1][2] It is the outermost grouping of the data in the data store.[3] It resembles the schema concept in Relational database management systems.[4] Generally, there is one keyspace per application.
Contents
Structure
A keyspace may contain column families or super columns. Each super column contains one or more column family, each column family contains at least one column. The keyspace is the highest abstraction in a distributed data store.
Comparison with relational database systems
The keyspace has similar importance like a schema has in a database. In contrast to the schema, however, it does not stipulate any concrete structure, like it is known in the entity-relationship model used widely in the relational data models. For instance, the contents of the keyspace can be column families, each having different number of columns, or even different columns. So, the column families that somehow relate to the row concept in relational databases do not stipulate any fixed structure. The only point that is the same with a schema is that it also contains a number of "objects", which are tables in RDBMS systems and here column families or super columns.
So, in distributed data stores, the whole burden to handle rows that may even change from data-store update to update lies on the shoulders of the programmers.
Examples
As an example, we show a number of column families in a keyspace. The CompareWith
keyword defines how the column comparison is made. In the example, the UTF-8 standard has been selected. Other ways of comparison exist, such as AsciiType
, BytesType
, LongType
, TimeUUIDType
.
<Keyspace Name="DeliciousClone">
<KeysCachedFraction>0.01</KeysCachedFraction>
<ColumnFamily CompareWith="UTF8Type" Name="Users"/>
<ColumnFamily CompareWith="UTF8Type" Name="Bookmarks"/>
<ColumnFamily CompareWith="UTF8Type" Name="Tags"/>
<ColumnFamily CompareWith="UTF8Type" Name="UserTags"/>
<ColumnFamily CompareWith="UTF8Type" CompareSubcolumnsWith="TimeUUIDType" ColumnType="Super" Name="UserBookmarks"/>
</Keyspace>
Another example shows a simplified Twitter clone data model:
<Keyspace Name="TwitterClone">
<KeysCachedFraction>0.01</KeysCachedFraction>
<ColumnFamily CompareWith="UTF8Type" Name="Users" />
<ColumnFamily CompareWith="UTF8Type" Name="UserAudits" />
<ColumnFamily CompareWith="UTF8Type" CompareSubcolumnsWith="TimeUUIDType" ColumnType="Super" Name="UserRelationships" />
<ColumnFamily CompareWith="UTF8Type" Name="Usernames" />
<ColumnFamily CompareWith="UTF8Type" Name="Statuses" />
<ColumnFamily CompareWith="UTF8Type" Name="StatusAudits" />
<ColumnFamily CompareWith="UTF8Type" CompareSubcolumnsWith="TimeUUIDType" ColumnType="Super" Name="StatusRelationships" />
</Keyspace>