Module: GitHub

Defined in:
lib/github/kv.rb,
lib/github/ds.rb,
lib/github/sql.rb,
lib/github/result.rb,
lib/github/sql/rows.rb,
lib/github/kv/config.rb,
lib/github/ds/version.rb,
lib/github/sql/errors.rb,
lib/github/sql/literal.rb

Overview

GitHub::KV is a key/value data store backed by MySQL (however, the backing store used should be regarded as an implementation detail).

Usage tips:

* Components in key names should be ordered by cardinality, from lowest to
  highest. That is, static key components should be at the front of the key
  and key components that vary should be at the end of the key in order of
  how many potential values they might have.

  For example, if using GitHub::KV to store a user preferences, the key
  should be named "user.#{preference_name}.#{user_id}". Notice that the
  part of the key that never changes ("user") comes first, followed by
  the name of the preference (of which there might be a handful), followed
  finally by the user id (of which there are millions).

  This will make it easier to scan for keys later on, which is a necessity
  if we ever need to move this data out of GitHub::KV or if we need to
  search the keyspace for some reason (for example, if it's a preference
  that we're planning to deprecate, putting the preference name near the
  beginning of the key name makes it easier to search for all users with
  that preference set).

* All reader methods in GitHub::KV return values wrapped inside a Result
  object.

  If any of these methods raise an exception for some reason (for example,
  the database is down), they will return a Result value representing this
  error rather than raising the exception directly. See lib/github/result.rb
  for more documentation on GitHub::Result including usage examples.

  When using GitHub::KV, it's important to handle error conditions and not
  assume that GitHub::Result objects will always represent success.
  Code using GitHub::KV should be able to fail partially if
  GitHub::KV is down. How exactly to do this will depend on a
  case-by-case basis - it may involve falling back to a default value, or it
  might involve showing an error message to the user while still letting the
  rest of the page load.

Defined Under Namespace

Modules: DS Classes: KV, Result, SQL