SlideShare a Scribd company logo
1 of 96
Download to read offline
VoltDB and Erlang




         TechPlanet 2012
           H. Diedrich

   http://www.eonblast.com – twitter @hdiedrich
Your Host


Henning Diedrich

• Founder, CEO Eonblast
• Maintainer of Emysql, Erlvolt
This Presentation




 Review With Leasure
• Video & Slides will be online at SK planet
• Slides will be online at slideshare.net
Eonblast
VoltDB and Erlang



  Open Source Tech for Scale
1. What makes Them Special?
2. How do They Look?
3. Are They For Me?

    Made for a Concrete Need

    Made for Distribution

    Made for Multi-Core

    Truly Different Approaches

    Based on Parallelism

    Improving on Previous Solutions

    Corporate-Created

    Open Source

    Professional Support

    Known by Those in the Know
The free, scaling, SQL DB




Redis + SQL + Scale = VoltDB
Why VoltDB?

Business Perspective

• Reduce Costs
• Scale Seamlessly
• Maintain Strategic Flexibility
Why VoltDB?

Production Perspective

• Keep The Good of SQL
• Use the Speed of In-Memory
• Take Pain out of Scaling
In-Memory


The Redis of clusters
•   Today good for 100s of GB of data
•   Sheds 75% of DBM system activity
•   Made from scratch for distribution
•   Full disk persistence
SQL

The MySQL of NewSQLs
•   SQL Has Flaws
•   Essentially Math, Not Syntax
•   You'd be missing Queries
•   VoltDB is even 'more SQL than SQL'
CAP

                •    Distributed
                •    Consistent
                •    Highly-Available
                •    Partition-Tolerant

                    … have it all!
Brewer on CAP 2012: http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
ACID

•   Atomicity
•   Consistency
•   Isolation
•   Durability

… for granted?
Double Bookkeeping

•   Not Every App needs It
•   Requires ACID Transactions
•   Neigh Impossible to emulate
•   Impossible With BASE
    (Eventual Consistency)
The Magic


• Compiled-In Queries
• Single-Thread Execution
• Snowflakes & Clones
Partitions
  State
    #
K Safety 1
  State
    #
Snowflake Structures

          FK

     FK        FK

          PK
          PK

     FK        FK

          FK
Snowflake Structures

     FK
           FK
                FK


      PK        FK


                FK
Other Data

             PK


             PK


             PK
Partitions

            State
             #
ABC   EFG    HIJ    KLM   NOP
Partitions

            State
             #
ABC   EFG    HIJ    KLM   NOP



A-Z   A-Z           A-Z   A-Z
             A-Z
Single Thread Execution

•   One Thread per Partition
•   One Thread per Transaction
•   One Thread can't race itself
•   Main Design Criterion
Benchmark
•   Node.js
•   Amazon EC2
•   64 core node.js clusters + 96 core VoltDB cluster
•   695,000 transactions per second (TPS)
•   2,780,000 operations per second
•   100,000 TPS per 8 core client
•   12,500 TPS per node.js core
•   Stable even under overload
•   Pretty much linear scale

Details: http://voltdb.com/company/blog/695k-tps-nodejs-and-voltdb
Benchmark
    TV Contest

•   Millions of callers
•   Small set of candidates
•   Massive peak
•   One transaction is one vote
•   Callers are identified by their telephone number
•   Callers must not be allowed to vote more than once
Benchmark
CREATE TABLE contestants
  (
     contestant_number integer     NOT NULL
  , contestant_name    varchar(50) NOT NULL
  , CONSTRAINT PK_contestants PRIMARY KEY
     (
       contestant_number
     )
  );
CREATE TABLE votes
  (
    phone_number        bigint     NOT NULL
  , state               varchar(2) NOT NULL
  , contestant_number   integer    NOT NULL
);
CREATE TABLE area_code_state
  (
     area_code smallint   NOT NULL
  , state      varchar(2) NOT NULL
  , CONSTRAINT PK_area_code_state PRIMARY KEY
     (
       area_code
     )
  );
Benchmark
The Transaction in 4 Operations


// Check if the vote is for a valid contestant
SELECT contestant_number FROM contestants WHERE contestant_number = ?;

// Check if the voter has exceeded their allowed number of votes
SELECT num_votes FROM v_votes_by_phone_number WHERE phone_number = ?;

// Check an area code to retrieve the corresponding state
SELECT state FROM area_code_state WHERE area_code = ?;

// Record a vote
INSERT INTO votes (phone_number, state, contestant_number) VALUES (?, ?, ?);
Drivers
•   Java
•   C, C++
•   node.js
•   Python
•   Ruby
•   Go
•   Erlang
•   VoltDB, Inc. 2009 – commercial developer, support
•   Open Source – 100% dictatorial by VoltDB, Inc
•   Made for OLTP – fast cheap writes, high throughput
•   CA of CAP – 100% consistent & highly available
•   Simple SQL – real queries
•   In-memory – 100x faster than MySQL
•   ACID transactions – double bookkeeping
•   Distributed – for painless growth
•   Linear scale – predictable, low cost
•   Replication, Snapshots – disk persistence, hot backup
•   More SQL than SQL – clean separation of data
Getting Started
• Download and Install from voltdb.com
• Open Getting Started inside the installation
• Run Hello World locally
• Read M.I.T. Paper A New Architecture
• Watch webinars at voltdb.com
• Free Help also from VoltDB staff
  http://community.voltdb.com/forum
• Use EC2 to benchmark your ideas
Upcoming Blog Post

• Looking at 14 databases
•   Riak, Cassandra, Membase, H-Base, Voldemort, MySQL, MySQL Cluster, Redis, Redis
    Cluster, Tokyo Cabinet, Memcached, CouchDB, Couchbase, VoltDB, MongoDB, Postgres


• In the light of what games need
• Unbiased comparison
• Twitter @hdiedrich
Erlang may be to Java
 what Java was to C++




  C++ – pointers = Java
Java – deadlocks = Erlang
Why Erlang?

Business Perspective

• Reduce Costs
• Reduce Downtimes
• Shorten Time To Market
Why Erlang?

Production Perspective

• High Productivity
• Low Hardware Requirements
• Fewer Errors
Who Is using It?


  “You probably use systems
based on Erlang/OTP every day
     without knowing it.“

         Mike Williams
Erlang Game Servers




Zynga: FarmVille via membase, Activision Blizzard: Call of Duty, Bigpoint: Battle Star Galactica, Wooga: Magic Land
Erlang Poster Childs
Klarna AB



• Financial Services for E-Commerce
• 30 seconds downtime in 3 years

Distributed Databases
•       Membase



•       Riak



•       BigCouch
Sweet Spots
• Stateful Servers with High Throughput
• Cluster Distribution Layers
• Chats
Origins



PLEX
• Ericsson makes billions with telecom switches
• They used PLEX, an all proprietary software
• PLEX delivers, but has bad productivity
Origins
• The 80's: Ericsson Computer Science Lab
 Joe Armstrong, Robert Virding, Mike
 Williams

 „What aspects of computer languages
 make it easier to program telecom
 systems?“
Erlang was Built For

•   Reliability
•   Maintenance
•   Distribution
•   Productivity
Concurrency Built In



•   In the Language, not OS
•   Easier Testing
•   Massively Battle-Tested
•   Closer To Real Problems
The Magic

• Microprocesses
• Pattern Matching                          *




• Immutable Variables

* Not your familiar Regex string matching
Thinking Erlang
•   The Actor Model
•   Thinking Parallel
•   Thinking Functional
•   Thinking Processes
•   Pattern Matching
•   Let It Crash!
The Actor Model
Carl Hewitt 1973
• Behavior
• State                                    Actor
• Parallel
• Asynchronous Messages                   Data
                                         Data
                                                 Code
                                                  Code
• Mailboxes
• No Shared State
• Self-Contained Machines
                                            Object
                                            Process


Benefits
• More true to the real world
• Better suited for parallel hardware
• Better suited for distributed architectures
• Scaling garbage collection (sic!)
• Less Magic
Asynchronous Messages

                    Pid ! Msg




  Message dispatch is one-way, truly asynchronous.
  Not function calls but something in their own right.
  Clean break from the FP paradigm.
Thinking Processes
What should be a Process?

Processes                        “It's easy!”
                                 Joe Armstrong
• Don’t share State
• Communicate Asynchronously
• Are Very Cheap to create And keep
• Monitor Each Other
• Provide Contention Handling
• Constitute the Error Handling Atom
Objects share Threads




   Multiple objects share threads.
   Objects can be accessed across threads.
   Threads - and objects - share state.
Actors are Processes




 State, code and process form a unity: the actor.
 Like processes, actors do not share state.
 In fact, like humans. Who mostly work quite well.
Objects and Threads




C   C++ C# Java   JavaScript   Node   Lua   Python
Objects and Threads




       Idle Threads
Objects and Threads
           Leeroy Jenkins!!!




   Unwanted surviving objects
Objects and Threads
       2*B || !2*B ?




  Prematurely destroyed objects
Erlang Actors




Erlang Actors: State + Code + Process
Erlang Actors




    One dies.
Erlang Actors




   It's restarted.
Errors propagate




Loss of state can affect multiple modules.
State errors cross thread boundaries.
Defensive code multiplies.
Objects need Locks
Worker 1               Doing X1




Resource           Locked       Locked




Worker 2              Waiting      Doing X2


            ●
                System design is disrupted by explicit locks.
            ●
                Overly cautious locking slows things down.
            ●
                Forgotten locks create errors that show under load.
Crashed Locks Stall
Worker 1               Doing X1




Resource           Locked       Locked




Worker 2              Waiting      Doing X2


            ●
                Locks can need cross-thread error handling.
            ●
                Stalling and time outs aggravate load.
Processes are Transactional


       Do X1 for me!


    Funnel                   Doing X1   Doing X2


       Do X2 for me!




●
    One actor is one process, obviously cannot “race itself”.
●
    Mandating a job type to an actor creates a transactional funnel.
●
    Only one such job will ever be executing at any one time.
Thinking Parallel

 • The Generals’ Problem
 • Lamport Clocks
 • No Guarantees



“It's not easy.”
Robert Virding
Generals’ Problem




                                                State




   Two generals need to agree when to attack.
Generals’ Problem




                               State




      One sends a messenger.
Generals’ Problem




                     State




      Acknowledge.
Generals’ Problem




                          State




      ACK the ACK. Etc.
Generals’ Problem




                                   State




     The messenger may get lost.
Byzantine Generals




                                     State




      The generals, actually, too.
Lamport Clocks




Order matters more than time.
Source: Lamport http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf
Thinking Functional
  Small Functions
+ Immutable Variables
→ Don’t assign variables: return results!


Complete State in Plain Sight
→ Awful for updates in place.
→ Awsome for debugging & maintenance.


Erlang is not side-effect free at all.
Immutable Variables

   Can’t assign a second time:



           A = A + 1.


          A = 1, A = 2.
Immutable Variables
              It has to be:


               B = A + 1.


              A = 1, B = 2.

●
    Prevent Coding Errors
●
    Provide Transactional Semantic
●
    Allow For Pattern Matching Syntax
●
    Can be a Nuisance
Pattern Matching
   This can mean two things:


       A = func().

The meaning depends on whether
     A is already assigned.
Pattern Matching
The common, mixed case:


 {ok, A} = func().

 ok is an assertion AND
 A is being assigned.
Pattern Matching
    The common, mixed case:


      {ok, A} = func().

“This makes it hard to give Erlang a
       syntax like e.g. Lua.”
         Robert Virding
Let It Crash!
•   No Defense Code
•   On Error, restart Entire Process
•   Built-In Process Supervision & Restart
•   Missing Branches, Matches cause Crash

→ Shorter, Cleaner Code
→ Faster Implementation
→ More Robust: handles All Errors
Syntax

●
    Small
●
    Easy
●
    Stable
●
    Declarative
●
    Inspired by Prolog and ML
●
    Obvious State, Implicit Thread
Fibonacci


Looks like the math description

fib(0) -> 0;
fib(1) -> 1;
fib(N) when N>1 -> fib(N-1) + fib(N-2).
Hello, World!

-module(hello).
-export([start/0]).

start() ->
   io:format("Hello, World!~n").
Hello, World!
            -module(hello).
            -export([start/0, loop/0]).


            start() ->
              Pid = spawn(hello, loop, []),
              Pid ! hello.


            loop() ->
               receive
                  hello ->
                      io:format("Hello, World!~n"),
                      loop()
               end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Start
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Output
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Process Spawning
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->                                                                    New Process
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Blocking Receive
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Message Passing
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Pattern Matching
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Tail Recursion
-module(hello).
-export([start/0, loop/0]).


start() ->
  Pid = spawn(hello, loop, []),
  Pid ! hello.


loop() ->
   receive
      hello ->
          io:format("Hello, World!~n"),
          loop()
   end.

  From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
Productivity
Motorola Study running 2002 – 2006:

       “Erlang shows …
     • 2x higher throughput
     • 3x better latency
     • 3 - 7x shorter code
       … than the equivalent
       C++ implementation.”
Erlang
•   Ericsson AB 1983 – commercial developer, support
•   Open Source – 100% dictatorial by Ericsson
•   Professional Support – by veterans at Erlang Solutions
•   Made for telecom – complexity & robustness
•   Functional – improves maintainability
•   Actors Model – better than OO for parallel worlds
•   Distributed – seemless use of multi-cores
•   Parallel – Processes as basic building block
•   Simple Language – Easy to learn and maintain
•   Huge Library – OTP is made for server development
•   Battle-tested – billion $ projects, 1 million LOC
•   Great Community – bright and friendly devs
Learning Erlang

• Scour Post-Mortems
• Download and Install from erlang.org
• Fred’s site Learn You Some Erlang!
• Joe’s book Programming Erlang
• IRC #erlounge
• Erlang Mailing List
• Local Erlounge Meetings
• Erlang Factories & User Conferences
Erlvolt
Erlvolt



• The Erlang VoltDB Driver
• Stable Synchronous Version
• Upcoming Asynchronous Version


    https://github.com/Eonblast/Erlvolt
Erlvolt

Insert
erlvolt:callProcedure(Connection, "Insert", ["안녕하세요", "세계", "Korean"]),


Select
Response = erlvolt:callProcedure(Connection, "Select", ["Korean"]),
Row = erlvolt:fetchRow(Table, 1),
io:format("~n~n~s, ~s!~n",
[ erlvolt:getString(Row, Table, "HELLO"),
  erlvolt:getString(Row, Table, "WORLD") ]);
Resources
Erlang                                                           VoltDB
Web                                                              Download
http://www.erlang.org/                                           http://voltdb.com/products-services/downloads
http://learnyousomeerlang.com/
http://www.erlang.org/static/getting_started_quickly.html        Webinars
                                                                 http://community.voltdb.com/weninars
List
                                                                 Forum
http://erlang.org/mailman/listinfo/erlang-questions
                                                                 http://community.voltdb.com/forum
http://groups.google.com/group/erlang-programming
                                                                 Voter Example
Books                                                            https://github.com/VoltDB/voltdb/tree/master/examples/voter
http://pragprog.com/book/jaerlang/programming-erlang
http://shop.oreilly.com/product/9780596518189.do                 Benchmark Blog Post
                                                                 http://voltdb.com/company/blog/695k-tps-nodejs-and-voltdb
References
http://erldocs.com/                                              Volt’s Magic Sauce
http://www.erlang.org/doc/                                       http://nms.csail.mit.edu/~stavros/pubs/hstore.pdf

Post Mortems
http://www.facebook.com/note.php?note_id=14218138919
http://www.slideshare.net/wooga/erlang-the-big-switch-in-social-games



Erlvolt
https://github.com/Eonblast/Erlvolt


Eonblast
https://www.eonblast.com
Upcoming

• Erlvolt 2 – asynchronous Erlang VoltDB driver
• 14 New Databases for Games – Blog Post


 TBA on Twitter @hdiedrich
Questions


• Email: hdiedrich*eonblast.com
• Twitter: @hdiedrich
• VoltDB: http://community.voltdb.com/forum
• Erlang: erlang-questions@erlang.org
• Eonblast: http://www.eonblast.com
• Game News: @eonblast

More Related Content

What's hot

Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)bcantrill
 
Operational Buddhism: Building Reliable Services From Unreliable Components -...
Operational Buddhism: Building Reliable Services From Unreliable Components -...Operational Buddhism: Building Reliable Services From Unreliable Components -...
Operational Buddhism: Building Reliable Services From Unreliable Components -...Ernie Souhrada
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the CloudRyan Cuprak
 
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVMState: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVMJonas Bonér
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Ryan Cuprak
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...smallerror
 
Building Storage on the Cheap
Building Storage on the CheapBuilding Storage on the Cheap
Building Storage on the CheapYao Jun Yap
 
Play concurrency
Play concurrencyPlay concurrency
Play concurrencyJustin Long
 
A tour of Java and the JVM
A tour of Java and the JVMA tour of Java and the JVM
A tour of Java and the JVMAlex Birch
 
Devopsdays State of the Union Amsterdam 2014
Devopsdays State of the Union Amsterdam 2014 Devopsdays State of the Union Amsterdam 2014
Devopsdays State of the Union Amsterdam 2014 John Willis
 
Searching Chinese Patents Presentation at Enterprise Data World
Searching Chinese Patents Presentation at Enterprise Data WorldSearching Chinese Patents Presentation at Enterprise Data World
Searching Chinese Patents Presentation at Enterprise Data WorldOpenSource Connections
 
Toward low-latency Java applications - javaOne 2014
Toward low-latency Java applications - javaOne 2014Toward low-latency Java applications - javaOne 2014
Toward low-latency Java applications - javaOne 2014John Davies
 
Hardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itHardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itAlexander Roche
 
Lean Startup with WebObjects
Lean Startup with WebObjectsLean Startup with WebObjects
Lean Startup with WebObjectsWO Community
 

What's hot (17)

Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)
 
Operational Buddhism: Building Reliable Services From Unreliable Components -...
Operational Buddhism: Building Reliable Services From Unreliable Components -...Operational Buddhism: Building Reliable Services From Unreliable Components -...
Operational Buddhism: Building Reliable Services From Unreliable Components -...
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
 
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVMState: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
Core Principles Of Ci
Core Principles Of CiCore Principles Of Ci
Core Principles Of Ci
 
Building Storage on the Cheap
Building Storage on the CheapBuilding Storage on the Cheap
Building Storage on the Cheap
 
Play concurrency
Play concurrencyPlay concurrency
Play concurrency
 
A tour of Java and the JVM
A tour of Java and the JVMA tour of Java and the JVM
A tour of Java and the JVM
 
Devopsdays State of the Union Amsterdam 2014
Devopsdays State of the Union Amsterdam 2014 Devopsdays State of the Union Amsterdam 2014
Devopsdays State of the Union Amsterdam 2014
 
Searching Chinese Patents Presentation at Enterprise Data World
Searching Chinese Patents Presentation at Enterprise Data WorldSearching Chinese Patents Presentation at Enterprise Data World
Searching Chinese Patents Presentation at Enterprise Data World
 
Toward low-latency Java applications - javaOne 2014
Toward low-latency Java applications - javaOne 2014Toward low-latency Java applications - javaOne 2014
Toward low-latency Java applications - javaOne 2014
 
MichaelLutherResume60
MichaelLutherResume60MichaelLutherResume60
MichaelLutherResume60
 
Forget The ORM!
Forget The ORM!Forget The ORM!
Forget The ORM!
 
Hardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itHardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with it
 
Lean Startup with WebObjects
Lean Startup with WebObjectsLean Startup with WebObjects
Lean Startup with WebObjects
 

Viewers also liked

20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)Pavlo Baron
 
Winning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleWinning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleRusty Klophaus
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaErlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaHakka Labs
 
Messaging With Erlang And Jabber
Messaging With  Erlang And  JabberMessaging With  Erlang And  Jabber
Messaging With Erlang And Jabberl xf
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John StevensonJAX London
 
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)Howard Lewis Ship
 
NDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsNDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsTorben Hoffmann
 
Introduction to Erlang for Python Programmers
Introduction to Erlang for Python ProgrammersIntroduction to Erlang for Python Programmers
Introduction to Erlang for Python ProgrammersPython Ireland
 
Elixir for aspiring Erlang developers
Elixir for aspiring Erlang developersElixir for aspiring Erlang developers
Elixir for aspiring Erlang developersTorben Dohrn
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Introthnetos
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and SimpleBen Mabey
 
Elixir Into Production
Elixir Into ProductionElixir Into Production
Elixir Into ProductionJamie Winsor
 
Clojure: Towards The Essence of Programming
Clojure: Towards The Essence of ProgrammingClojure: Towards The Essence of Programming
Clojure: Towards The Essence of ProgrammingHoward Lewis Ship
 

Viewers also liked (20)

20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)
 
Winning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleWinning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test Cycle
 
Elixir talk
Elixir talkElixir talk
Elixir talk
 
High Performance Erlang
High  Performance  ErlangHigh  Performance  Erlang
High Performance Erlang
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Clojure class
Clojure classClojure class
Clojure class
 
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaErlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
 
Messaging With Erlang And Jabber
Messaging With  Erlang And  JabberMessaging With  Erlang And  Jabber
Messaging With Erlang And Jabber
 
Clojure values
Clojure valuesClojure values
Clojure values
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John Stevenson
 
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
 
From Perl To Elixir
From Perl To ElixirFrom Perl To Elixir
From Perl To Elixir
 
NDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsNDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business Needs
 
Introduction to Erlang for Python Programmers
Introduction to Erlang for Python ProgrammersIntroduction to Erlang for Python Programmers
Introduction to Erlang for Python Programmers
 
Elixir for aspiring Erlang developers
Elixir for aspiring Erlang developersElixir for aspiring Erlang developers
Elixir for aspiring Erlang developers
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and Simple
 
Elixir Into Production
Elixir Into ProductionElixir Into Production
Elixir Into Production
 
Clojure: Towards The Essence of Programming
Clojure: Towards The Essence of ProgrammingClojure: Towards The Essence of Programming
Clojure: Towards The Essence of Programming
 
Erlang - Because S**t Happens
Erlang - Because S**t HappensErlang - Because S**t Happens
Erlang - Because S**t Happens
 

Similar to VoltDB and Erlang - Tech planet 2012

Fixing twitter
Fixing twitterFixing twitter
Fixing twitterRoger Xia
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...xlight
 
John adams talk cloudy
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudyJohn Adams
 
The Economies of Scaling Software
The Economies of Scaling SoftwareThe Economies of Scaling Software
The Economies of Scaling SoftwareAbdelmonaim Remani
 
Chirp 2010: Scaling Twitter
Chirp 2010: Scaling TwitterChirp 2010: Scaling Twitter
Chirp 2010: Scaling TwitterJohn Adams
 
The impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenThe impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenParticular Software
 
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInJay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInLinkedIn
 
Building a Database for the End of the World
Building a Database for the End of the WorldBuilding a Database for the End of the World
Building a Database for the End of the Worldjhugg
 
Building FoundationDB
Building FoundationDBBuilding FoundationDB
Building FoundationDBFoundationDB
 
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...Amazon Web Services
 
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)Bob Pusateri
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's ArchitectureTony Tam
 
From legacy, to batch, to near real-time
From legacy, to batch, to near real-timeFrom legacy, to batch, to near real-time
From legacy, to batch, to near real-timeMarc Sturlese
 
From legacy, to batch, to near real-time
From legacy, to batch, to near real-timeFrom legacy, to batch, to near real-time
From legacy, to batch, to near real-timeDani Solà Lagares
 
Intro to Big Data and NoSQL
Intro to Big Data and NoSQLIntro to Big Data and NoSQL
Intro to Big Data and NoSQLDon Demcsak
 
Latest (storage IO) patterns for cloud-native applications
Latest (storage IO) patterns for cloud-native applications Latest (storage IO) patterns for cloud-native applications
Latest (storage IO) patterns for cloud-native applications OpenEBS
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsŁukasz Sowa
 
Running MongoDB in the Cloud
Running MongoDB in the CloudRunning MongoDB in the Cloud
Running MongoDB in the CloudTony Tam
 

Similar to VoltDB and Erlang - Tech planet 2012 (20)

Fixing twitter
Fixing twitterFixing twitter
Fixing twitter
 
Fixing_Twitter
Fixing_TwitterFixing_Twitter
Fixing_Twitter
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
John adams talk cloudy
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudy
 
The Economies of Scaling Software
The Economies of Scaling SoftwareThe Economies of Scaling Software
The Economies of Scaling Software
 
Chirp 2010: Scaling Twitter
Chirp 2010: Scaling TwitterChirp 2010: Scaling Twitter
Chirp 2010: Scaling Twitter
 
The impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenThe impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves Goeleven
 
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInJay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
 
Building a Database for the End of the World
Building a Database for the End of the WorldBuilding a Database for the End of the World
Building a Database for the End of the World
 
InfectNet Technical
InfectNet TechnicalInfectNet Technical
InfectNet Technical
 
Building FoundationDB
Building FoundationDBBuilding FoundationDB
Building FoundationDB
 
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...
RMG202 Rainmakers: How Netflix Operates Clouds for Maximum Freedom and Agilit...
 
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)
Select Stars: A DBA's Guide to Azure Cosmos DB (SQL Saturday Oslo 2018)
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's Architecture
 
From legacy, to batch, to near real-time
From legacy, to batch, to near real-timeFrom legacy, to batch, to near real-time
From legacy, to batch, to near real-time
 
From legacy, to batch, to near real-time
From legacy, to batch, to near real-timeFrom legacy, to batch, to near real-time
From legacy, to batch, to near real-time
 
Intro to Big Data and NoSQL
Intro to Big Data and NoSQLIntro to Big Data and NoSQL
Intro to Big Data and NoSQL
 
Latest (storage IO) patterns for cloud-native applications
Latest (storage IO) patterns for cloud-native applications Latest (storage IO) patterns for cloud-native applications
Latest (storage IO) patterns for cloud-native applications
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problems
 
Running MongoDB in the Cloud
Running MongoDB in the CloudRunning MongoDB in the Cloud
Running MongoDB in the Cloud
 

Recently uploaded

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Recently uploaded (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

VoltDB and Erlang - Tech planet 2012

  • 1. VoltDB and Erlang TechPlanet 2012 H. Diedrich http://www.eonblast.com – twitter @hdiedrich
  • 2. Your Host Henning Diedrich • Founder, CEO Eonblast • Maintainer of Emysql, Erlvolt
  • 3. This Presentation Review With Leasure • Video & Slides will be online at SK planet • Slides will be online at slideshare.net
  • 5. VoltDB and Erlang Open Source Tech for Scale 1. What makes Them Special? 2. How do They Look? 3. Are They For Me?
  • 6. Made for a Concrete Need  Made for Distribution  Made for Multi-Core  Truly Different Approaches  Based on Parallelism  Improving on Previous Solutions  Corporate-Created  Open Source  Professional Support  Known by Those in the Know
  • 7. The free, scaling, SQL DB Redis + SQL + Scale = VoltDB
  • 8. Why VoltDB? Business Perspective • Reduce Costs • Scale Seamlessly • Maintain Strategic Flexibility
  • 9. Why VoltDB? Production Perspective • Keep The Good of SQL • Use the Speed of In-Memory • Take Pain out of Scaling
  • 10. In-Memory The Redis of clusters • Today good for 100s of GB of data • Sheds 75% of DBM system activity • Made from scratch for distribution • Full disk persistence
  • 11. SQL The MySQL of NewSQLs • SQL Has Flaws • Essentially Math, Not Syntax • You'd be missing Queries • VoltDB is even 'more SQL than SQL'
  • 12. CAP • Distributed • Consistent • Highly-Available • Partition-Tolerant … have it all! Brewer on CAP 2012: http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
  • 13. ACID • Atomicity • Consistency • Isolation • Durability … for granted?
  • 14. Double Bookkeeping • Not Every App needs It • Requires ACID Transactions • Neigh Impossible to emulate • Impossible With BASE (Eventual Consistency)
  • 15. The Magic • Compiled-In Queries • Single-Thread Execution • Snowflakes & Clones
  • 17. K Safety 1 State #
  • 18. Snowflake Structures FK FK FK PK PK FK FK FK
  • 19. Snowflake Structures FK FK FK PK FK FK
  • 20. Other Data PK PK PK
  • 21. Partitions State # ABC EFG HIJ KLM NOP
  • 22. Partitions State # ABC EFG HIJ KLM NOP A-Z A-Z A-Z A-Z A-Z
  • 23. Single Thread Execution • One Thread per Partition • One Thread per Transaction • One Thread can't race itself • Main Design Criterion
  • 24. Benchmark • Node.js • Amazon EC2 • 64 core node.js clusters + 96 core VoltDB cluster • 695,000 transactions per second (TPS) • 2,780,000 operations per second • 100,000 TPS per 8 core client • 12,500 TPS per node.js core • Stable even under overload • Pretty much linear scale Details: http://voltdb.com/company/blog/695k-tps-nodejs-and-voltdb
  • 25. Benchmark TV Contest • Millions of callers • Small set of candidates • Massive peak • One transaction is one vote • Callers are identified by their telephone number • Callers must not be allowed to vote more than once
  • 26. Benchmark CREATE TABLE contestants ( contestant_number integer NOT NULL , contestant_name varchar(50) NOT NULL , CONSTRAINT PK_contestants PRIMARY KEY ( contestant_number ) ); CREATE TABLE votes ( phone_number bigint NOT NULL , state varchar(2) NOT NULL , contestant_number integer NOT NULL ); CREATE TABLE area_code_state ( area_code smallint NOT NULL , state varchar(2) NOT NULL , CONSTRAINT PK_area_code_state PRIMARY KEY ( area_code ) );
  • 27. Benchmark The Transaction in 4 Operations // Check if the vote is for a valid contestant SELECT contestant_number FROM contestants WHERE contestant_number = ?; // Check if the voter has exceeded their allowed number of votes SELECT num_votes FROM v_votes_by_phone_number WHERE phone_number = ?; // Check an area code to retrieve the corresponding state SELECT state FROM area_code_state WHERE area_code = ?; // Record a vote INSERT INTO votes (phone_number, state, contestant_number) VALUES (?, ?, ?);
  • 28. Drivers • Java • C, C++ • node.js • Python • Ruby • Go • Erlang
  • 29. VoltDB, Inc. 2009 – commercial developer, support • Open Source – 100% dictatorial by VoltDB, Inc • Made for OLTP – fast cheap writes, high throughput • CA of CAP – 100% consistent & highly available • Simple SQL – real queries • In-memory – 100x faster than MySQL • ACID transactions – double bookkeeping • Distributed – for painless growth • Linear scale – predictable, low cost • Replication, Snapshots – disk persistence, hot backup • More SQL than SQL – clean separation of data
  • 30. Getting Started • Download and Install from voltdb.com • Open Getting Started inside the installation • Run Hello World locally • Read M.I.T. Paper A New Architecture • Watch webinars at voltdb.com • Free Help also from VoltDB staff http://community.voltdb.com/forum • Use EC2 to benchmark your ideas
  • 31. Upcoming Blog Post • Looking at 14 databases • Riak, Cassandra, Membase, H-Base, Voldemort, MySQL, MySQL Cluster, Redis, Redis Cluster, Tokyo Cabinet, Memcached, CouchDB, Couchbase, VoltDB, MongoDB, Postgres • In the light of what games need • Unbiased comparison • Twitter @hdiedrich
  • 32.
  • 33. Erlang may be to Java what Java was to C++ C++ – pointers = Java Java – deadlocks = Erlang
  • 34. Why Erlang? Business Perspective • Reduce Costs • Reduce Downtimes • Shorten Time To Market
  • 35. Why Erlang? Production Perspective • High Productivity • Low Hardware Requirements • Fewer Errors
  • 36. Who Is using It? “You probably use systems based on Erlang/OTP every day without knowing it.“ Mike Williams
  • 37. Erlang Game Servers Zynga: FarmVille via membase, Activision Blizzard: Call of Duty, Bigpoint: Battle Star Galactica, Wooga: Magic Land
  • 38. Erlang Poster Childs Klarna AB • Financial Services for E-Commerce • 30 seconds downtime in 3 years Distributed Databases • Membase • Riak • BigCouch
  • 39. Sweet Spots • Stateful Servers with High Throughput • Cluster Distribution Layers • Chats
  • 40. Origins PLEX • Ericsson makes billions with telecom switches • They used PLEX, an all proprietary software • PLEX delivers, but has bad productivity
  • 41. Origins • The 80's: Ericsson Computer Science Lab Joe Armstrong, Robert Virding, Mike Williams „What aspects of computer languages make it easier to program telecom systems?“
  • 42. Erlang was Built For • Reliability • Maintenance • Distribution • Productivity
  • 43. Concurrency Built In • In the Language, not OS • Easier Testing • Massively Battle-Tested • Closer To Real Problems
  • 44. The Magic • Microprocesses • Pattern Matching * • Immutable Variables * Not your familiar Regex string matching
  • 45. Thinking Erlang • The Actor Model • Thinking Parallel • Thinking Functional • Thinking Processes • Pattern Matching • Let It Crash!
  • 46. The Actor Model Carl Hewitt 1973 • Behavior • State Actor • Parallel • Asynchronous Messages Data Data Code Code • Mailboxes • No Shared State • Self-Contained Machines Object Process Benefits • More true to the real world • Better suited for parallel hardware • Better suited for distributed architectures • Scaling garbage collection (sic!) • Less Magic
  • 47. Asynchronous Messages Pid ! Msg Message dispatch is one-way, truly asynchronous. Not function calls but something in their own right. Clean break from the FP paradigm.
  • 48. Thinking Processes What should be a Process? Processes “It's easy!” Joe Armstrong • Don’t share State • Communicate Asynchronously • Are Very Cheap to create And keep • Monitor Each Other • Provide Contention Handling • Constitute the Error Handling Atom
  • 49. Objects share Threads Multiple objects share threads. Objects can be accessed across threads. Threads - and objects - share state.
  • 50. Actors are Processes State, code and process form a unity: the actor. Like processes, actors do not share state. In fact, like humans. Who mostly work quite well.
  • 51. Objects and Threads C C++ C# Java JavaScript Node Lua Python
  • 52. Objects and Threads Idle Threads
  • 53. Objects and Threads Leeroy Jenkins!!! Unwanted surviving objects
  • 54. Objects and Threads 2*B || !2*B ? Prematurely destroyed objects
  • 55. Erlang Actors Erlang Actors: State + Code + Process
  • 56. Erlang Actors One dies.
  • 57. Erlang Actors It's restarted.
  • 58. Errors propagate Loss of state can affect multiple modules. State errors cross thread boundaries. Defensive code multiplies.
  • 59. Objects need Locks Worker 1 Doing X1 Resource Locked Locked Worker 2 Waiting Doing X2 ● System design is disrupted by explicit locks. ● Overly cautious locking slows things down. ● Forgotten locks create errors that show under load.
  • 60. Crashed Locks Stall Worker 1 Doing X1 Resource Locked Locked Worker 2 Waiting Doing X2 ● Locks can need cross-thread error handling. ● Stalling and time outs aggravate load.
  • 61. Processes are Transactional Do X1 for me! Funnel Doing X1 Doing X2 Do X2 for me! ● One actor is one process, obviously cannot “race itself”. ● Mandating a job type to an actor creates a transactional funnel. ● Only one such job will ever be executing at any one time.
  • 62. Thinking Parallel • The Generals’ Problem • Lamport Clocks • No Guarantees “It's not easy.” Robert Virding
  • 63. Generals’ Problem State Two generals need to agree when to attack.
  • 64. Generals’ Problem State One sends a messenger.
  • 65. Generals’ Problem State Acknowledge.
  • 66. Generals’ Problem State ACK the ACK. Etc.
  • 67. Generals’ Problem State The messenger may get lost.
  • 68. Byzantine Generals State The generals, actually, too.
  • 69. Lamport Clocks Order matters more than time. Source: Lamport http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf
  • 70. Thinking Functional Small Functions + Immutable Variables → Don’t assign variables: return results! Complete State in Plain Sight → Awful for updates in place. → Awsome for debugging & maintenance. Erlang is not side-effect free at all.
  • 71. Immutable Variables Can’t assign a second time: A = A + 1. A = 1, A = 2.
  • 72. Immutable Variables It has to be: B = A + 1. A = 1, B = 2. ● Prevent Coding Errors ● Provide Transactional Semantic ● Allow For Pattern Matching Syntax ● Can be a Nuisance
  • 73. Pattern Matching This can mean two things: A = func(). The meaning depends on whether A is already assigned.
  • 74. Pattern Matching The common, mixed case: {ok, A} = func(). ok is an assertion AND A is being assigned.
  • 75. Pattern Matching The common, mixed case: {ok, A} = func(). “This makes it hard to give Erlang a syntax like e.g. Lua.” Robert Virding
  • 76. Let It Crash! • No Defense Code • On Error, restart Entire Process • Built-In Process Supervision & Restart • Missing Branches, Matches cause Crash → Shorter, Cleaner Code → Faster Implementation → More Robust: handles All Errors
  • 77. Syntax ● Small ● Easy ● Stable ● Declarative ● Inspired by Prolog and ML ● Obvious State, Implicit Thread
  • 78. Fibonacci Looks like the math description fib(0) -> 0; fib(1) -> 1; fib(N) when N>1 -> fib(N-1) + fib(N-2).
  • 80. Hello, World! -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 81. Start -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 82. Output -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 83. Process Spawning -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> New Process receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 84. Blocking Receive -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 85. Message Passing -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 86. Pattern Matching -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 87. Tail Recursion -module(hello). -export([start/0, loop/0]). start() -> Pid = spawn(hello, loop, []), Pid ! hello. loop() -> receive hello -> io:format("Hello, World!~n"), loop() end. From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html
  • 88. Productivity Motorola Study running 2002 – 2006: “Erlang shows … • 2x higher throughput • 3x better latency • 3 - 7x shorter code … than the equivalent C++ implementation.”
  • 89. Erlang • Ericsson AB 1983 – commercial developer, support • Open Source – 100% dictatorial by Ericsson • Professional Support – by veterans at Erlang Solutions • Made for telecom – complexity & robustness • Functional – improves maintainability • Actors Model – better than OO for parallel worlds • Distributed – seemless use of multi-cores • Parallel – Processes as basic building block • Simple Language – Easy to learn and maintain • Huge Library – OTP is made for server development • Battle-tested – billion $ projects, 1 million LOC • Great Community – bright and friendly devs
  • 90. Learning Erlang • Scour Post-Mortems • Download and Install from erlang.org • Fred’s site Learn You Some Erlang! • Joe’s book Programming Erlang • IRC #erlounge • Erlang Mailing List • Local Erlounge Meetings • Erlang Factories & User Conferences
  • 92. Erlvolt • The Erlang VoltDB Driver • Stable Synchronous Version • Upcoming Asynchronous Version https://github.com/Eonblast/Erlvolt
  • 93. Erlvolt Insert erlvolt:callProcedure(Connection, "Insert", ["안녕하세요", "세계", "Korean"]), Select Response = erlvolt:callProcedure(Connection, "Select", ["Korean"]), Row = erlvolt:fetchRow(Table, 1), io:format("~n~n~s, ~s!~n", [ erlvolt:getString(Row, Table, "HELLO"), erlvolt:getString(Row, Table, "WORLD") ]);
  • 94. Resources Erlang VoltDB Web Download http://www.erlang.org/ http://voltdb.com/products-services/downloads http://learnyousomeerlang.com/ http://www.erlang.org/static/getting_started_quickly.html Webinars http://community.voltdb.com/weninars List Forum http://erlang.org/mailman/listinfo/erlang-questions http://community.voltdb.com/forum http://groups.google.com/group/erlang-programming Voter Example Books https://github.com/VoltDB/voltdb/tree/master/examples/voter http://pragprog.com/book/jaerlang/programming-erlang http://shop.oreilly.com/product/9780596518189.do Benchmark Blog Post http://voltdb.com/company/blog/695k-tps-nodejs-and-voltdb References http://erldocs.com/ Volt’s Magic Sauce http://www.erlang.org/doc/ http://nms.csail.mit.edu/~stavros/pubs/hstore.pdf Post Mortems http://www.facebook.com/note.php?note_id=14218138919 http://www.slideshare.net/wooga/erlang-the-big-switch-in-social-games Erlvolt https://github.com/Eonblast/Erlvolt Eonblast https://www.eonblast.com
  • 95. Upcoming • Erlvolt 2 – asynchronous Erlang VoltDB driver • 14 New Databases for Games – Blog Post TBA on Twitter @hdiedrich
  • 96. Questions • Email: hdiedrich*eonblast.com • Twitter: @hdiedrich • VoltDB: http://community.voltdb.com/forum • Erlang: erlang-questions@erlang.org • Eonblast: http://www.eonblast.com • Game News: @eonblast