LogicBlox 4.4.2

Executive Summary

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.