New Zay-ES Core and Zay-ES Net release v1.6.0

I’ve just (finally) published another Zay-ES release. v1.6.0 should be bubbling through the maven central repos as we speak.

There were a bunch of usability improvements with this release, to include supporting some level of automatic table upgrades when fields are added… or are marked with the new IndexedField annotation.

See below for the BIG MOTIVATION for doing this.

You can see the full release notes here:

And here:

The BIG MOTIVATION
…for doing this was that I had a branch of query improvement changes that I wanted to be able to put into ‘master’ but they are maybe enough of a change that I wanted to get one more regular release out first.

But for any of you who build from source, I’m working on 1.7.0-SNAPSHOT that has some new query optimizations.

BEFORE: you could only specify one filter when searching for entities. So you kind of had to pick which component to filter on. Furthermore, if you asked for 5 different components, the SQL layer would perform 5 different queries and do the intersection on those entity IDs.

Amazingly, this original stop-gap approach has worked for a decade or more… but Mythruna worlds finally started to get enough “position” components that retrieving all 65,000 of them just to reduce them down to the dozen or so that had the other components… was… less than ideal.

NOW: instead of just passing in a raw (Filter, component, component, …) you can build an EntityCriteria where you specify the component types you want and each type can have an optional query associated with it.

But the BIG DEAL is that if some or all of these are stored in database tables, then the Zay-ES SQL layer will collect them together into one select statement across all of the relevant tables.

This is a game changes for databases as large as Mythruna uses. I got some of my 20-100ms queries down to 0.01ms in some cases.

I’m hoping some of the more “bleeding edge” Zay-ES users get to check it out and help me harden it a bit before publishing an official 1.7.0.

10 Likes

Thanks for the new feature. I may not be a “bleeding edge” user, but I would like to try it out on my “over-engineered” game. I do quite some filtering on the server side logic.

I also have plans for a multiplayer game that has NPCs. and I believe this will prove quite useful in there :slight_smile:

1 Like