YugabyteDB

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
YugabyteDB
Original authorsKannan Muthukkaruppan, Karthik Ranganathan, Mikhail Bautin
DevelopersYugabyte, Inc.
Initial release2016; 10 years ago (2016)
Stable release
2024.2 (Stable)
2.23 (Preview) / December 9, 2024; 18 months ago (2024-12-09)
September 13, 2024; 21 months ago (2024-09-13)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inC++
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemAlma Linux 8.x and derivatives, MacOS
    PlatformBare Metal, Virtual Machine, Docker, Kubernetes and various container management platforms
    Available inEnglish
    TypeRDBMS
    LicenseApache 2.0
    Yugabyte, Inc.
    Company typePrivate
    IndustryDatabase
    Founded2016; 10 years ago (2016)
    FounderKannan Muthukkaruppan, Karthik Ranganathan, Mikhail Bautin
    HeadquartersSunnyvale, California, US
    Key people
    Kannan Muthukkaruppan
    (co-founder & president,
    product development)
    Karthik Ranganathan
    (co-founder & CTO)
    Mikhail Bautin
    (co-founder &
    software architect)
    Bill Cook
    (CEO)
    ServicesCommercial database management systems
    Websiteyugabyte.com

    YugabyteDB is a high-performance transactional distributed SQL database for cloud-native applications, developed by Yugabyte.[1]

    History

    [edit | edit source]

    Yugabyte was founded by ex-Facebook engineers Kannan Muthukkaruppan, Karthik Ranganathan, and Mikhail Bautin. At Facebook, they were part of the team that built and operated Cassandra and HBase[2][3] for workloads such as Facebook Messenger and Facebook's Operational Data Store.[4]

    The founders came together in February 2016 to build YugabyteDB.[5][6]

    YugabyteDB was initially available in two editions: community and enterprise. In July 2019, Yugabyte open-sourced previously commercial features and launched YugabyteDB as open-source under the Apache 2.0 license.[7]

    Funding

    [edit | edit source]

    In October 2021, five years after the company's inception, Yugabyte closed a $188 Million Series C funding round to become a Unicorn start-up with a valuation of $1.3Bn[8]

    Funding Rounds
    Series Date Announced Amount Investors
    A 10 Feb 2016 $8M Lightspeed Venture Partners, Jeff Rothschild[9][10]
    A 12 Jun 2018 $16M Lightspeed Venture Partners, Dell Technology Capital[11][12]
    B 09 Jun 2020 $30M Wipro Ventures, Lightspeed Venture Partners. Dell Technology Capital. 8VC [13][14]
    B 03 Mar 2021 $48M Wipro Ventures. Lightspeed Venture Partners. Greenspring Associates, Dell Technology Capital, 8VC[15][16]
    C 28 Oct 2021 $188M Wells Fargo Strategic Capital, Sapphire Ventures, Meritech Capital Partners, Lightspeed Venture Partners, Dell Technology Capital, 8VC[17][18][19]

    Architecture

    [edit | edit source]

    YugabyteDB is a distributed SQL database that aims to be strongly transactionally consistent across failure zones (i.e. ACID compliance].[20][21] In CAP Theorem terms YugabyteDB is a Consistent/Partition Tolerant (CP) database.[22][23][24] YugabyteDB has two layers,[25] a storage engine known as DocDB and the Yugabyte Query Layer.[26]

    Architecture Block Diagram for YugabyteDB
    YugabyteDB Architecture

    DocDB

    [edit | edit source]

    The storage engine consists of a customized RocksDB[26][27] combined with sharding and load balancing algorithms for the data. In addition, the Raft consensus algorithm controls the replication of data between the nodes.[26][27] There is also a Distributed transaction manager[26][27] and Multiversion concurrency control (MVCC)[26][27] to support distributed transactions.[27]

    The engine also exploits a Hybrid Logical Clock[28][26] that combines coarsely-synchronized physical clocks with Lamport clocks to track causal relationships.[29]

    The DocDB layer is not directly accessible by users.[26]

    YugabyteDB Query Layer

    [edit | edit source]

    Yugabyte has a pluggable query layer that abstracts the query layer from the storage layer below.[30] There are currently two APIs that can access the database:[27]

    YSQL[31] is a PostgreSQL code-compatible API[32][33] based around v11.2. YSQL is accessed via standard PostgreSQL drivers using native protocols.[34] It exploits the native PostgreSQL code for the query layer[35] and replaces the storage engine with calls to the pluggable query layer. This re-use means that Yugabyte supports many features, including:

    • Triggers & Stored Procedures[33]
    • PostgreSQL extensions that operate in the query layer[33]
    • Native JSONB support[33]

    YCQL[36] is a Cassandra-like API based around v3.10 and re-written in C++. YCQL is accessed via standard Cassandra drivers[37] using the native protocol port of 9042. In addition to the 'vanilla' Cassandra components, YCQL is augmented with the following features:

    • Transactional consistency - unlike Cassandra, Yugabyte YCQL is transactional.[38]
    • JSON data types supported natively[39]
    • Tables can have secondary indexes[40]

    Currently, data written to either API is not accessible via the other API, however YSQL can access YCQL using the PostgreSQL foreign data wrapper feature.[41]

    The security model for accessing the system is inherited from the API, so access controls for YSQL look like PostgreSQL,[42] and YCQL looks like Cassandra access controls.[43]

    Cluster-to-cluster replication

    [edit | edit source]

    In addition to its core functionality of distributing a single database, YugabyteDB has the ability to replicate between database instances.[44][45] The replication can be one-way or bi-directional and is asynchronous. One-way replication is used either to create a read-only copy for workload off-loading or in a read-write mode to create an active-passive standby. Bi-directional replication is generally used in read-write configurations and is used for active-active configurations, geo-distributed applications, etc.

    Migration tooling

    [edit | edit source]

    Yugabyte also provides YugabyteDB Voyager, tooling to facilitate the migration of Oracle and other similar databases to YugabyteDB.[46][47] This tool supports the migration of schemas, procedural code and data from the source platform to YugabyteDB.

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    15. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    16. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    17. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    18. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    19. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    20. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    21. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    22. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    23. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    24. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    25. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    26. ^ a b c d e f g Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    27. ^ a b c d e f Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    28. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    29. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    30. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    31. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    32. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    33. ^ a b c d Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    34. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    35. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    36. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    37. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    38. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    39. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    40. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    41. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    42. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    43. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    44. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    45. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    46. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    47. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]