LogicBlox 4.4.2

Release Date: March 3rd 2017

Executive Summary

LogicBlox 4.4.2 introduces the following enhancements:

  • The database includes performance enhancements that is particularly noticeable when evaluating predicates that are defined by a large number of disjuncts or multiple rules.

  • New lb web-client API offers better performance as well as improvements in ease of use. Developers will also benefit from more expressive TDX transformation functions, as well as helper predicates that simplify the specification of TDX configurations.

  • The Measure Service includes a number of performance enhancements.

  • Modeler-js expands its support for self-service of both charting, as well as level members: Users are offered control over the color and size of charts, as well as the axis along which the measure values are charted; Users can also directly edit the label of level members in the grid. Modeler-js has also added Internet Explorer 11+ to its list of supported browsers.

What's New

Database

  • Merge rules are now evaluated much more efficiently. Merge rules are used for predicates that have disjuncts or are defined by multiple rules. For predicates with a very large number of disjuncts, the performance gain can be very large (e.g. 7x overall speed-up was measured in an application by one of our partners). For typical applications we have measured about 15% overall performance gain.

  • Performance improvements for task parallelism.

Services Framework

  • New lb web-client API: the new API for lb web-client implementation uses Netty (instead of Jetty, as is the case with the API prior to 4.2.2). This change results in better performance as well as a more user-friendly API.

    Note

    The old API is still available for compatibility but will be deprecated in a future release. The lb web-client command line now uses the new API, but for compatibility purpose, one can send the parameter --version1 to use the old API.

  • TDX now supports transformations using more built-in predicates, such as string:split and string:at. The requirement is that the built-in predicate is functionally determined by one input value from the CSV file

    Example 57. 

    For example, the following expressions can be used to define transformation functions, where s is unbound in the body of the transformation function: string:split[s, "|", 1], string:matches[s, "(a*)(b).", 1], and string:at[s, 2].

  • TDX Helpers: LogicBlox now comes with a new library called lb:web:delim:tdx_helpers, to simplify the specification of TDX configuration.

    Note

    Please refer to the Reference Manual for a detailed overview of this feature and its usage.

  • Improvements to lb web-server's Proxies integration with the target services. With this release, if the target service returns a Location header with a URL targeted by that proxy, the URL is converted to point to the proxy before being sent back to the client.

ConnectBlox

  • QueryPredicate now has a field called row_limit that can be used to abort the transaction if more tuples are returned than the specified limit. The response will include a message indicating which uses of QueryPredicate exceed the limit. It is now possible to still query data out of the workspace even in the event of a transaction failure using QueryPredicate. Depending on which stage of evaluation the failure occurred within, some data may not yet have been computed, but this is feature can be used for extracting information about data that may be causing an integrity constraint failure.

Measure Service

  • The Measure Service now supports the row_limit field in QueryRequest.

  • A number of optimizations have been introduced in both the Measure Service and the LogiQL it generates:

    • Certain aggregations that are implicit in CubiQL queries may be materialized explicitly, so that it can lift dices and filters out of them.

    • Simplifidications are applied to CubiQL expressions that can be detected to be "total" in that they compute the complete set of positions for a given intersection.

    • The CubiQL optimizer can now rewrite child expressions in parallel for better CPU utilization when a large request is received.

    • The Measure Service will choose the key-order for reporting predicates by the most frequently used key-order of the predicates in the report.

    • The generated logic for some collect aggregations will now be fused together into a single LogiQL rule.

    • The Measure Service now attempts to generate IDB logic when it can in transaction lifetime requests, rather than always using delta logic.

    • If a queried CubiQL expression is chosen to be inlined, when generating reports it may be materialized to avoid repeated recomputation.

Modeler-js

  • Charting Improvements:

    • End-users now have the ability to control whether measure values should be charted along the X or Y axis, using the new Measure Values pill that is available in chart mode.

      Example 58. 

      In the example below, the Measures pill is on the rows, while the new Measure Values pill is on the Y-axis. As a result, a chart is displayed along the X-axis for each of the 2 measures, while the measure values are charted along the Y-axis:

      By moving the Measures pill to the Y-axis, the two charts are displayed below each other, while their values are still charted along the Y-axis. In previous versions, the measure values would have been charged along the X-axis automatically.

    • Ability to control the size and colors used for charts, using the new Size and Color panels. Additionally, level pills as well as the Measures pill can be placed on the Color panel, so that the data gets combined in one chart, but differentiated by color.

      Example 59. 

      In the chart configuration below the Region level is placed onto the Color panel, creating a stacked color bar chart, where each Region on the bar has a distinct color.

  • IE 11+ Support: Internet Explorer 11+ is now also officially supported for modeler-js based applications. In previous releases, only Chrome was officially supported.

  • Editing of Level Member Labels: Level member labels can now be edited directly in the grid by double-clicking on the header cell for a member. To enable this feature in a modeler-based application the editSchema property needs to be set to true in the modelingFeatures section which is a part of the configuration passed to AuthenticatedModelerController.

  • Suppressed ID field in Create Form: The ID field is now by default suppressed in the create form. To see / edit the ID when creating a new level member, users can click on "+ More Options" in the form.

Developer Tools

  • Cloud-store (S3 library) has improved the computation of the default chunk size so that files bigger than 50G can be uploaded and downloaded without manually having to configure the chunk size. The previous default chunk size would result in more than 10000 parts for big files, which is not supported by AWS S3.

  • The lb extract-example utility that was introduced in 4.4.0 now supports constructors (earlier it only supported entities with refmodes). We have also implemented support for predicates with default values.

  • Long-running rule reports now include information on the default value and the number of stored facts for predicates.

  • The predInfo command of lb batch-script now again reports statistics for alpha tree (write-optimized) predicates. Before 4.4.0, it already reported statistics but this was not implemented for alpha tree predicates.

Corrected Issues

The issues listed below have been corrected since the 4.4.1 release:

  • Resolved an issue in lb-web where sessions were created based on the username sent by the client instead of the canonical username. This issue affected the value pulsed in lb:web:auth:username, causing some services to not work correctly if the user was logged in with a different case (e.g. "User" instead of "user").

  • Fix to lb workflow's TDX Import task, when using an S3 location, it would implicitly consider a wildcard in the end of the URL.

    Example 60. 

    An import of s3://my_bucket/sales was equivalent to s3://my_bucket/sales*. Now the implicit wildcard has been fixed, but users can still use a wildcard if wanted.

  • Resolved an issue with analyzing recursively defined measure language rules.
  • Modeler-js:
    • The selected label display options are now also respected when in form or chart mode, as well as in entity dropdowns.

    • Resovled an issue where an empty filter popup was displayed when the Measures pill was the only field on the slice.

    • Resolved sorting related issues of level members in level dropdowns on the slice.

    • Resolved an issue that caused an error in the browser's console when trying to resize the browser window after idle logout.

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.4.2 by following the steps outlined below:

  1. Download the installation package.
  2. Extract the tarball in <YourPreferredInstallDirectory>
  3. Run the following command:
    source <YourPreferredInstallDirectory>/logicblox-4.4.2/etc/profile.d/logicblox.sh
    NOTE: this script will set all the necessary environment variables. You might want to add this command to your .bashrc.

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 10.10+ is supported for local development.
Java Runtime Environment 8
Python 2.7 or higher
Client requirements
Applications using modeler-js User Interface Components: Google Chrome or Internet Explorer 11+
Requirements for applications using non-modeler-js components may vary per application.