Giter Club home page Giter Club logo

Comments (4)

npgall avatar npgall commented on August 19, 2024

Hi langzhaozhi, I'm accepting this suggestion, thanks.

I plan that the next major version of CQEngine will integrate more closely with Java 8 features such as lambdas and method handles. Especially method handles, would simplify attributes a lot.

The current version is compatible with Java 6, so these changes are not yet possible. Hopefully in the new year I can do it though. Thanks!

from cqengine.

npgall avatar npgall commented on August 19, 2024

This is now done. When run on Java 8, CQEngine 2.8.0 now allows attributes to be created from lambda expressions. It was possible to implement this in a way that retained compatibility with Java 6 & 7, so CQEngine still works with those earlier versions of Java too.

from cqengine.

sp-1234 avatar sp-1234 commented on August 19, 2024

How about primitives support to avoid boxing? It was also suggested above but I'm not sure if it's done.

Should support the primitives types of attributes, like DoubleFunction IntFunction similar in java8. The reason is that queries are often in a large amount of data application, CQEngine should try every possible way to eliminate the performance loss of the automatic boxing and unboxing in order to achieve the highest efficiency

from cqengine.

npgall avatar npgall commented on August 19, 2024

I don't think this would be a high priority or much of a problem.

Boxing overhead is usually a much bigger problem than unboxing overhead, and boxing overhead should already be mitigated to a large extent.

Currently all primitives are stored in boxed form when using on-heap persistence and indexes. So it means there should not be any boxing overhead during query processing. There will be unboxing overhead, but this does not produce any garbage.

Off-heap persistence and indexes store data in primitive format. This means when suitable indexes are available to support the query during query processing, the values from queries will be unboxed and compared with primitive values inside indexes. So this entails unboxing (not boxing) as well, which means there should not be much boxing/GC overhead either.

However if the collection is using off-heap persistence or indexes, but certain queries can't be answered from a single index, then filtering will be performed. Filtering can involve deserializing objects speculatively to check if they match the query, which can be quite expensive. However in applications where this is a problem, an alternative "merge" strategy can be configured (the index merge strategy) which performs joins between indexes instead of deserializing objects speculatively, which can reduce that overhead.

So I think we need to see actual evidence of boxing or unboxing being a performance bottleneck before making API changes to support primitives. If anybody wants to do some proof of concepts or testing in this area I'd be open to collaborating though!

from cqengine.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.