MANIFESTO 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. [Note: this is the Redis manifesto, for general information about
  2. installing and running Redis read the README file instead.]
  3. Redis Manifesto
  4. ===============
  5. 1 - A DSL for Abstract Data Types. Redis is a DSL (Domain Specific Language)
  6. that manipulates abstract data types and implemented as a TCP daemon.
  7. Commands manipulate a key space where keys are binary-safe strings and
  8. values are different kinds of abstract data types. Every data type
  9. represents an abstract version of a fundamental data structure. For instance
  10. Redis Lists are an abstract representation of linked lists. In Redis, the
  11. essence of a data type isn't just the kind of operations that the data types
  12. support, but also the space and time complexity of the data type and the
  13. operations performed upon it.
  14. 2 - Memory storage is #1. The Redis data set, composed of defined key-value
  15. pairs, is primarily stored in the computer's memory. The amount of memory in
  16. all kinds of computers, including entry-level servers, is increasing
  17. significantly each year. Memory is fast, and allows Redis to have very
  18. predictable performance. Datasets composed of 10k or 40 millions keys will
  19. perform similarly. Complex data types like Redis Sorted Sets are easy to
  20. implement and manipulate in memory with good performance, making Redis very
  21. simple. Redis will continue to explore alternative options (where data can
  22. be optionally stored on disk, say) but the main goal of the project remains
  23. the development of an in-memory database.
  24. 3 - Fundamental data structures for a fundamental API. The Redis API is a direct
  25. consequence of fundamental data structures. APIs can often be arbitrary but
  26. not an API that resembles the nature of fundamental data structures. If we
  27. ever meet intelligent life forms from another part of the universe, they'll
  28. likely know, understand and recognize the same basic data structures we have
  29. in our computer science books. Redis will avoid intermediate layers in API,
  30. so that the complexity is obvious and more complex operations can be
  31. performed as the sum of the basic operations.
  32. 4 - Code is like a poem; it's not just something we write to reach some
  33. practical result. Sometimes people that are far from the Redis philosophy
  34. suggest using other code written by other authors (frequently in other
  35. languages) in order to implement something Redis currently lacks. But to us
  36. this is like if Shakespeare decided to end Enrico IV using the Paradiso from
  37. the Divina Commedia. Is using any external code a bad idea? Not at all. Like
  38. in "One Thousand and One Nights" smaller self contained stories are embedded
  39. in a bigger story, we'll be happy to use beautiful self contained libraries
  40. when needed. At the same time, when writing the Redis story we're trying to
  41. write smaller stories that will fit in to other code.
  42. 5 - We're against complexity. We believe designing systems is a fight against
  43. complexity. We'll accept to fight the complexity when it's worthwhile but
  44. we'll try hard to recognize when a small feature is not worth 1000s of lines
  45. of code. Most of the time the best way to fight complexity is by not
  46. creating it at all.
  47. 6 - Two levels of API. The Redis API has two levels: 1) a subset of the API fits
  48. naturally into a distributed version of Redis and 2) a more complex API that
  49. supports multi-key operations. Both are useful if used judiciously but
  50. there's no way to make the more complex multi-keys API distributed in an
  51. opaque way without violating our other principles. We don't want to provide
  52. the illusion of something that will work magically when actually it can't in
  53. all cases. Instead we'll provide commands to quickly migrate keys from one
  54. instance to another to perform multi-key operations and expose the tradeoffs
  55. to the user.
  56. 7 - We optimize for joy. We believe writing code is a lot of hard work, and the
  57. only way it can be worth is by enjoying it. When there is no longer joy in
  58. writing code, the best thing to do is stop. To prevent this, we'll avoid
  59. taking paths that will make Redis less of a joy to develop.