Documentation ¶
Index ¶
- Constants
- type Storage
- func (s *Storage) AddKeygroupTrigger(kg string, tid string, host string) error
- func (s *Storage) Append(kg string, id string, val string, expiry int) error
- func (s *Storage) Close() error
- func (s *Storage) CreateKeygroup(kg string) error
- func (s *Storage) Delete(kg string, id string, vvector vclock.VClock) error
- func (s *Storage) DeleteKeygroup(kg string) error
- func (s *Storage) DeleteKeygroupTrigger(kg string, tid string) error
- func (s *Storage) Exists(kg string, id string) bool
- func (s *Storage) ExistsKeygroup(kg string) bool
- func (s *Storage) GetKeygroupTrigger(kg string) (map[string]string, error)
- func (s *Storage) IDs(kg string) ([]string, error)
- func (s *Storage) Read(kg string, id string) ([]string, []vclock.VClock, bool, error)
- func (s *Storage) ReadAll(kg string) (map[string][]string, map[string][]vclock.VClock, error)
- func (s *Storage) ReadSome(kg string, id string, count uint64) (map[string][]string, map[string][]vclock.VClock, error)
- func (s *Storage) Update(kg string, id string, val string, expiry int, vvector vclock.VClock) error
Constants ¶
const (
NULLValue = "%NULL%"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Storage ¶
type Storage struct {
// contains filtered or unexported fields
}
Storage is a struct that saves all necessary information to access the database, in this case the session for DynamoDB and the table name. The DynamoDB table is set up with the following attributes: Keygroup (S) | Key (S) | Value (Document) | Expiry (N) | Trigger (Document) where "Keygroup" is the partition key and "Key" is the sort key (both together form the primary key). Set this up with the following aws-cli command (table name in this case is "fred"):
aws dynamodb create-table --table-name fred \ --attribute-definitions "AttributeName=Keygroup,AttributeType=S AttributeName=Key,AttributeType=S" \ --key-schema "AttributeName=Keygroup,KeyType=HASH AttributeName=Key,KeyType=RANGE" \ --provisioned-throughput "ReadCapacityUnits=1,WriteCapacityUnits=1"
The "Expiry" attribute is used to expire data items automatically in DynamoDB. Set this up with this command:
aws dynamodb update-time-to-live --table-name fred \ --time-to-live-specification "Enabled=true, AttributeName=Expiry"
Two types of items are stored here:
- Keygroup configuration is stored with the NULL "Key" and the keygroup name: this has the "Trigger" attribute that stores a map of trigger nodes for that keygroup
- Keys are stored with a "Keygroup" and unique "Key", where the Value is a list of version vectors and values - the additional "Expiry" attribute can be set to let the keys expire, and it is updated with each update to the data item (note that this means that in DynamoDB, all versions of an item expire at the same time, not necessarily in the order in which they appeared)
func NewFromExisting ¶
func (*Storage) AddKeygroupTrigger ¶
AddKeygroupTrigger stores a trigger node in the dynamodb database.
func (*Storage) Append ¶
Append appends the item to the specified keygroup by incrementing the latest key by one.
func (*Storage) Close ¶
Close closes the underlying DynamoDB connection (no cleanup needed at the moment).
func (*Storage) CreateKeygroup ¶
CreateKeygroup creates the given keygroup in the DynamoDB database.
func (*Storage) DeleteKeygroup ¶
DeleteKeygroup deletes the given keygroup from the DynamoDB database.
func (*Storage) DeleteKeygroupTrigger ¶
DeleteKeygroupTrigger removes a trigger node from the dynamodb database.
func (*Storage) ExistsKeygroup ¶
ExistsKeygroup checks if the given keygroup exists in the DynamoDB database.
func (*Storage) GetKeygroupTrigger ¶
GetKeygroupTrigger returns a map of all trigger nodes from the dynamodb database.