Skip to content

Releases: questdb/questdb

QuestDB 1.0.4

02 Jan 00:44
Compare
Choose a tag to compare

configuration file bugfix

QuestDB 1.0.3

01 Jan 21:45
Compare
Choose a tag to compare

Bugfix release, stability improvements.

QuestDB 1.0.1

20 Oct 00:50
Compare
Choose a tag to compare

Bugfixes

  • fixed windows distribution (questdb.exe)
  • incorrect default home directory on Linux
  • memory page size used by variance and stddev functions moved to config
  • renamed package for text parser

QuestDB 1.0.0 RC1

13 Oct 21:06
Compare
Choose a tag to compare

QuestDB initial release.

This release brings technology focused on making your data workflow faster, more productive and more fun.

  • install QuestDB in seconds
  • import any amount of your data via copy-paste or drag-n-drop via Web browser
  • make sense of your data directly from browser via high-performance SQL engine

QuestDB does in seconds what other tools do in minutes, hours, days or don't do at all.

2.1.0 (THOR)

13 Oct 21:02
Compare
Choose a tag to compare

New features

SSL encryption.

Replication can be done over secure channel using industry-standard SSL encryption protocol. Configuring SSL is notoriously complicated, so I tried my best to make it as simple as possible for both JournalServer and JournalClient. I shall let you be the judge though. More...

SSL authentication.

Client Certificate came almost for free after implementing SSL. I did try to make it simple for you though. More...

Shared secret authentication.

It is now possible for client and server to exchange shared secret for authentication and authorization purposes. Shared Secret can be anything you want it to be, there is no limit on amount of data you can send. More...

Kerberos authentication.

Usually Kerberos is a pain, not with NFSdb, not anymore. Kerberos implementation uses Shared Secret exchange mechanism and in addition it handles generation and validation of service tokens, Your application deals with usernames. It is that cool! More...

Kerberos integrated Windows authentication.

If you have JournalClient running on Windows platform you can generate service token for currently logged in user with minimum fuss. User is not prompted for password! More...

JournalClient auto-reconnect

JournalClient can automatically recover after server restarts. If you have multiple clients replicating single server you can restart server without needing to restart clients afterwards. Whats cooler still is that when you shutdown server clients can failover automatically. JournalClient will also maintain transactional consistency during server outages.

Compatibility warning

Replication protocol is incompatible with previous release of NFSdb. I had to change the protocol to accomodate shared secret exchange.

2.0.1 (DRAX)

31 Aug 00:59
Compare
Choose a tag to compare

Installation

<dependency>
    <groupId>com.nfsdb</groupId>
    <artifactId>nfsdb-core</artifactId>
    <version>2.0.1</version>
</dependency>

Change log

  • #10 Support for sublasses
  • #16 Fixed defect in BulkWriter that could cause index data loss
  • Reader creates new journal if one does not exist instead of throwing exception.
  • #15 Unique key support
  • #4 Data increment processing

Unique key support

Unique keys can be either String or int fields. In fact it is just an indexed field that you can search.

Configure int "id" field as follows:

JournalFactory factory = new JournalFactory(new JournalConfigurationBuilder() {{
    $(Order.class)
        .$int("id").index()
        // or .$str("id).index() for String keys
    ;
}}.build(args[0]));

To prepare for search by "id" create parameterisable query stream. It is analogous to PreparedStatement.

Journal<Order> reader = factory.reader(Order.class);
Order order = new Order();
Q q = new QImpl();

StringRef col = new StringRef();
col.value = "id";
IntRef id = new IntRef();

DataSource<Order> ds = q.ds(
        q.forEachPartition(
                q.sourceDesc(reader)
                , q.headEquals(col, id)
        )
        , order
);

Execute query for given "id":

id.value = i;
Order o = ds.$new().head();

Data increment processing

On client have a reader for journal that is being replicated. increment() and incrementBuffered() create iterator over added data.

This is fully featured client that measures transaction latency.

public static void main(String[] args) throws Exception {
    JournalFactory factory = new JournalFactory(args[0]);
    final JournalClient client = new JournalClient(factory);

    final Journal<Price> reader = factory.bulkReader(Price.class, "price-copy");

    client.subscribe(Price.class, null, "price-copy", new TxListener() {
        @Override
        public void onCommit() {
            int count = 0;
            long t = 0;
            for (Price p : reader.incrementBuffered()) {
                if (count == 0) {
                    t = p.getTimestamp();
                }
                count++;
            }
            System.out.println("took: "
                            + (System.currentTimeMillis() - t) 
                            + ", count=" + count);
        }
    });
    client.start();
    System.out.println("Client started");
}

2.0.0 (Acapulco)

18 Aug 00:31
Compare
Choose a tag to compare

This release introduces two major features:

  • network component to NFSdb, enabling journal replication over TCP/IP with automated multicast discovery.
  • java based configuration replaced venerable nfsdb.xml

This nfsdb.xml:

<db>
    <journal class="org.nfsdb.examples.model.Quote" defaultPath="quote" timestampColumn="timestamp"
             partitionType="MONTH" recordCountHint="1000000" openPartitionTTL="180" lagHours="24" key="sym">
        <sym name="sym" indexed="true" maxsize="4" hintDistinctCount="15"/>
        <sym name="ex" maxsize="2" hintDistinctCount="1"/>
        <sym name="mode" hintDistinctCount="1"/>
    </journal>

    <journal class="org.nfsdb.examples.model.Price" defaultPath="price" timestampColumn="timestamp"
             partitionType="MONTH" recordCountHint="1000000" openPartitionTTL="180" lagHours="24" key="sym">
        <sym name="sym" indexed="true" maxsize="4" hintDistinctCount="15"/>
    </journal>
</db>

is replaced with this configuration:

    public static final JournalConfigurationBuilder CONFIG = new JournalConfigurationBuilder() {{
        $(Quote.class)
                .partitionBy(PartitionType.MONTH)
                .lag(24, TimeUnit.HOURS)
                .key("sym")
                .$sym("sym").index().size(4).valueCountHint(15)
                .$sym("ex").size(2).valueCountHint(1)
                .$ts()
        ;

        $(Price.class)
                .key("sym")
                .partitionBy(PartitionType.MONTH)
                .$sym("sym").index().size(4).valueCountHint(15)
                .$ts()
        ;
    }};

Changelog:

  • added TCP/IP replication
  • added java-based configuration
  • zero-configuration support for all components to simplify API for light usage.
  • API refactoring (simplification) breaks code compatibility with earlier versions. SymbolIndex class is renamed to KVIndex. SymbolIndex.put() is replaced with KVIndex.add()
  • Broken binary compatibility with previous versions for Strings. String length now always 4 bytes, which improves performance. Older journals would need to be converted.
  • improved index performance
  • improved append performance
  • revised size calculations to make journals take less space on disk

1.0.3 (Songbird)

18 Jun 20:52
Compare
Choose a tag to compare
  • thrift support is optional. NFSdb works well with POJOs.
  • durable transaction support (JournalWriter.commitDurable())
  • Journal.select() to chose active columns. This saves a lot of unnecessary disk reading.
  • Queries for invalid symbols return empty result set instead of throwing exceptions
  • 5% performance improvement

Maintenance release 1.0.2

01 Jun 22:56
Compare
Choose a tag to compare

NFSdb 1.0.2

  • bulk writer and reader to enable access to journals that do not fit available RAM
  • increased speed of append and read (in tests 160ms read and 500ms write of 1,000,000 records)
  • increased speed and reduced memory footprint of appendLag() method.
  • increased performance of commit() method

Maintenance release

12 May 11:10
Compare
Choose a tag to compare
1.0.1

Update README.md