Key-value data model
In the key-value data model, each key is associated with one and only one value. Key-value stores expose three basic APIs:
GET
to fetch the value of a key (for example,GET('name')
)SET
to store the value of a key (for example,SET('name', 'yugabyte')
)DEL
to delete a key and its value (for example,DEL('name')
)
With these three simple functionalities, key-value stores have carved themselves a niche in modern infrastructure because of their speed and simplicity.
YugabyteDB provides several advantages when used as a key-value store:
- YugabyteDB internally stores data as a collection of key-value pairs and therefore automatically excels as a key-value store.
- Being distributed by design, YugabyteDB also naturally acts as a distributed key-value store.
- YugabyteDB inherently provides consistency of data because of RAFT replication, which is typically not guaranteed by other key-value stores.
Setup
Setup
To set up a local universe, refer to Set up a local YugabyteDB universe.Setup
To set up a cluster, refer to Set up a YugabyteDB Managed cluster.Setup
To set up a universe, refer to Set up a YugabyteDB Anywhere universe.Store user data
For example, to store the details of a user, you could adopt a schema where each attribute is a separate key, such as the following:
user1.name = "John Wick"
user1.country = "USA"
user2.name = "Harry Potter"
user2.country = "UK"
Note
You can also consider a schema where the value is a JSON structure consisting of multiple attributes associated with a user.For this, you can create a table as follows:
CREATE TABLE kvstore (
key VARCHAR,
value VARCHAR,
PRIMARY KEY(key)
);
To add some data, enter the following:
INSERT INTO kvstore VALUES ('user1.name', 'John Wick'), ('user1.country', 'USA'),
('user2.name', 'Harry Potter'), ('user2.country', 'UK');
GET
To get the name of user1, you can execute the following:
-- GET('user1.name')
SELECT value FROM kvstore WHERE key = 'user1.name';
value
-----------
John Wick
SET
To store a value for a key, you can do an insert. Because the key could already exist, you should provide an ON CONFLICT UPDATE
clause.
INSERT INTO kvstore(key, value) VALUES('user1.name', 'Jack Ryan')
ON CONFLICT (key) DO
UPDATE SET value = EXCLUDED.value;
DEL
To delete a key and its value, you can execute a simple DELETE
command as follows:
DELETE FROM kvstore WHERE key = 'user1.name';
Use cases
Cache server
The key-value data model is best suited for designing cache servers where the cached data is represented by a key. The cached object could be represented in JSON string (to have multiple attributes) and parsed by the application.
Telephone directory
A telephone directory instantly falls into the key-value model, where the key is the phone number and the value is the name and address of the person that the phone number belongs to.
Session store
A session-oriented application, such as a web application, starts a session when a user logs in, and is active until the user logs out or the session times out. During this period, the application stores all session-related data like profile information, themes, zipcode, geography, and so on, in a fast key-value store.
Shopping cart
A user's shopping cart can be represented as a JSON string and stored under a key (for example, user1.cart
). Given the strong consistency and resilience offered by YugabyteDB, the cart information will not be lost even in case of disasters.