Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9102045
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T01:17:02+00:00 2026-06-17T01:17:02+00:00

I read about Voltdb’s command log . The command log records the transaction invocations

  • 0

I read about Voltdb’s command log. The command log records the transaction invocations instead of each row change as in a write-ahead log. By recording only the invocation, the command logs are kept to a bare minimum, limiting the impact the disk I/O will have on performance.

Can anyone explain the database theory behind why Voltdb uses a command log and why the standard SQL databases such as Postgres, MySQL, SQLServer, Oracle use a write-ahead log?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T01:17:03+00:00Added an answer on June 17, 2026 at 1:17 am

    I think it is better to rephrase:

    Why does new distributed VoltDB use a command log over write-ahead log?

    Let’s do an experiment and imagine you are going to write your own storage/database implementation. Undoubtedly you are advanced enough to abstract a file system and use block storage along with some additional optimizations.

    Some basic terminology:

    • State : stored information at a given point of time
    • Command : directive to the storage to change its state

    So your database may look like the following:

    enter image description here

    Next step is to execute some command:

    enter image description here

    Please note several important aspects:

    1. A command may affect many stored entities, so many blocks will get dirty
    2. Next state is a function of the current state and the command

    Some intermediate states can be skipped, because it is enough to have a chain of commands instead.

    enter image description here

    Finally, you need to guarantee data integrity.

    • Write-Ahead Logging – central concept is that State changes should be logged before any heavy update to permanent storage. Following our idea we can log incremental changes for each block.
    • Command Logging – central concept is to log only Command, which is used to produce the state.

    enter image description here

    There are Pros and Cons for both approaches. Write-Ahead log contains all changed data, Command log will require addition processing, but fast and lightweight.

    VoltDB: Command Logging and Recovery

    The key to command logging is that it logs the invocations, not the
    consequences, of the transactions. By recording only the invocation,
    the command logs are kept to a bare minimum, limiting the impact the disk I/O will
    have on performance.

    Additional notes

    SQLite: Write-Ahead Logging

    The traditional rollback journal works by writing a copy of the
    original unchanged database content into a separate rollback journal
    file and then writing changes directly into the database file.

    A COMMIT occurs when a special record indicating a commit is appended
    to the WAL. Thus a COMMIT can happen without ever writing to the
    original database, which allows readers to continue operating from the
    original unaltered database while changes are simultaneously being
    committed into the WAL.

    PostgreSQL: Write-Ahead Logging (WAL)

    Using WAL results in a significantly reduced number of disk writes,
    because only the log file needs to be flushed to disk to guarantee
    that a transaction is committed, rather than every data file changed
    by the transaction.

    The log file is written sequentially, and so the
    cost of syncing the log is much less than the cost of flushing the
    data pages. This is especially true for servers handling many small
    transactions touching different parts of the data store. Furthermore,
    when the server is processing many small concurrent transactions, one
    fsync of the log file may suffice to commit many transactions.

    Conclusion

    Command Logging:

    1. is faster
    2. has lower footprint
    3. has heavier “Replay” procedure
    4. requires frequent snapshot

    Write Ahead Logging is a technique to provide atomicity. Better Command Logging performance should also improve transaction processing. Databases on 1 Foot

    enter image description here

    Confirmation

    VoltDB Blog: Intro to VoltDB Command Logging

    One advantage of command logging over ARIES style logging is that a
    transaction can be logged before execution begins instead of executing
    the transaction and waiting for the log data to flush to disk. Another
    advantage is that the IO throughput necessary for a command log is
    bounded by the network used to relay commands and, in the case of
    Gig-E, this throughput can be satisfied by cheap commodity disks.

    It is important to remember VoltDB is distributed by its nature. So transactions are a little bit tricky to handle and performance impact is noticeable.

    VoltDB Blog: VoltDB’s New Command Logging Feature

    The command log in VoltDB consists of stored procedure invocations and
    their parameters. A log is created at each node, and each log is
    replicated because all work is replicated to multiple nodes. This
    results in a replicated command log that can be de-duped at replay
    time. Because VoltDB transactions are strongly ordered, the command
    log contains ordering information as well. Thus the replay can occur
    in the exact order the original transactions ran in, with the full
    transaction isolation VoltDB offers. Since the invocations themselves
    are often smaller than the modified data, and can be logged before
    they are committed, this approach has a very modest effect on
    performance. This means VoltDB users can achieve the same kind of
    stratospheric performance numbers, with additional durability
    assurances.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I read about Change the delegate of MGTwitterEngine and don't really get it. I
Read about Server push here . I want to push data to client from
Read about the issue in this stackoverflow question . Still have the same issue
Ive read about it and to be honest it all seems like a bunch
I read about small talk being completely object oriented.. is C++ also completely object
I read about using <context:component-scan base-package=tld.mydomain.business> <context:include-filter type=annotation expression=org.springframework.stereotype.Service/> </context:component-scan> and annotate my service
I read about an inheritance feature in PostgreSQL that seemed pretty neat. Unfortunately I
I read about ContactsContract.CommonDataKinds.GroupMembership , but I can't figure out what URI use to
I read about Big-O Notation from here and had few questions on calculating the
I read about many CSS related languages and tools which need ruby. What is

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.