RedBeardLab / rediSQL

Redis module that provides a completely functional SQL database
https://redisql.com
Other
1.55k stars 150 forks source link

Confused on the Pro Version - Latest Stable Release #101

Closed djrobby closed 4 years ago

djrobby commented 4 years ago

What is the latest stable release version of the Pro edition? I purchased RediSQL Pro on Jan 27, 2020 and it came with a download link for version 1.0.2 (see attached). However, after checking out your github for recent releases, it left me anything but confused. It shows v1.1.2 released on Aug 14, 2019 and v2.0.0-rc02 on Sept 22, 2019...both of which are ahead what I received and dated way before my purchase. I can understand if these are open-source only versions but, being a purchaser of the Pro version, I could not find any documentation that states so. Please advise. Thx

SS_20200516_7

siscia commented 4 years ago

I will write you an email tomorrow!

The V2 is not ready yet, but it will have some nice features!

The 1.1.2 is not that different from the 1.0.2, you will get that one in the email tomorrow!

kivo360 commented 4 years ago

What will V2 be?

siscia commented 4 years ago

V2 will be an enhancement of V1, hopefully :)

The main difference will be the command syntax, in V1 we have a lot of commands that encapsulate parameters, for instance you get "QUERY", "QUERY.NOW", "QUERY.INTO" and so on. Those are just QUERY commands but you can see that adding an option means creating N+1 new commands.

In V2 we will have just "QUERY" and we will append the modifiers like "NOW" or "INTO", in this way adding an options to a command will be simpler.

V2.0 will be only this and it is pretty much ready.

This work is motivated because I want to add the concept of "CONNECTION". A connection will represent a connection to an SQLite databases. So we can have multiple connections against a single databases. This is very desirable for a read-intesive workload, so you will be able to spawn different threads that act against the same database.

Unfortunately SQLite takes a full lock against table on write, hence a write intensive workload won't benefits from multiple connections, but it will allow transaction.

So you open a transaction, you modify a row in the database, in your application you do whatever work you want to do and finally you commit or abort the transaction.

Again, we take a full lock on the table so what you do in your application must be reasonably fast. But we get proper transactions.

Not everybody will benefit from this, but for somebody will be useful.

Also since V2 introduce a change in the syntax of commands it will break existing code. Really sorry about that, but it is also the reason why it is a major version change. However we keep the V1 commands in there, just namespaced in V1.

For instance the old EXEC will be REDISQL.V1.EXEC and not REDISQL.EXEC.

Making treasure of this lesson, same namespacing rules will apply also to V2. In the version 2 you will be able to call the new EXEC command as REDISQL.EXEC but also as REDISQL.V2.EXEC.

On master there is already the code, and in the test you can see what it will look like.

If you got any questions I will be happy to answer, either here or via email.

kivo360 commented 4 years ago

Cool. How should I start learning Rust? After seeing projects like yours I can't help but feel it draws attention to learning lower level system languages to make projects like these possible.

I've been thinking a lot about using Redis' module systems to aid in solving systems fragmentation. I don't know what kinds of programs I should start writing to practice on, however. A first project that requires minimal time would be a great start. I was thinking of doing something with your RediSQL system to track metadata between systems.

siscia commented 4 years ago

This went a little off topic.

To learn a new language I am usually a fan of implementing some interesting data structure, this does not work with Rust. You can implement all the datastructure that you want but it does requires some experience.

A Redis module is interesting first project because you already have all the IO taken care by Redis itself, I was looking into a ordered redis set, bt where each key had it's own TTL. It can be a nice project. Moreover, the nice folks at RedisLab provide a simple SDK to write redis module in rust: https://github.com/RedisLabsModules/redismodule-rs

Of course to practically learn the language there is the standard Rust book, but books without projects don't work well with me.

Keep in mind that RediSQL can be consumed by all Redis client, python, js, go, rust, java, etc... you don't need to write it in Rust.

(I am closing this, but feel free to keep asking questions.)

djrobby commented 4 years ago

@siscia Yes, indeed it did go off topic and I never received my reply that you promised 5/16/2020. I have no further comments.