Giter Club home page Giter Club logo

event-reduce's Issues

Intuitive explanation of how the library works

I can understand the use-case for this library, but I don't understand (even marginally) the "how" of it.

Let's take the example query in the readme:

const exampleQuery: MongoQuery = {
    selector: {
        age: {
            $gt: 18
        },
        gender: 'm'
    },
    limit: 10,
    sort: ['name', '_id']
};

And let's say these are the initial database contents: (as JSON)

[
    {gender: "m", age: 10, name: "Bob"},
    {gender: "m", age: 20, name: "Dan"},
    {gender: "f", age: 10, name: "Alice"},
    {gender: "f", age: 20, name: "Sally"},
]

So then, the initial result set for the query would be this:

[
    {gender: "m", age: 20, name: "Dan"},
]

However, let's say a new user was just added:

{gender: "m", age: 30, name: "Mike"},

The new entry is, of course, a match for the query. And since the name "Mike" is later than "Dan", it should be added to the end of the query result set (rather than the start).

My specific question for this case then is: How on earth is your generic event-reduce algorithm able to know that the new "Michael" entry should be added after the "Dan" entry rather than before it?

This is of course easy to solve if you're hand-coding the query-result update system (eg. you do a binary search through the old results, to find the insert point for the new entry). But I currently have no idea how your library is able to accomplish this generically, based just on the MongoQuery params, the old results, and a change-stream entry. (it seems like it would have to recreate the entire MongoDB query execution code within the library -- yet the library's described as not being specific to MongoDB)

As explaining the entire algorithm would be too much to ask, I give the specific case above, in the hopes that there is an intuitive answer that can be given for this small case, that can give insight into how the library solves these cases in general.

Dependency Dashboard

This issue provides visibility into Renovate updates and their statuses. Learn more

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.


  • Check this box to trigger a request for Renovate to run again on this repository

Incorrect event-reduce action

We discovered some scary behavior in our app where items were being sorted wrong. We dug into and realized that event-reduce is actually suggesting an insertLast when it should be an insertFirst.

Here's the test case showing it: #443

I thiiink (though I don't fully understand the library yet) the issue is somewhere in the truth table to bdd conversion?

I think this because the json truth table calculateActionFromMap seems to correctly tell us runFullQueryAgain (well it's not ideal, which would be insertFirst, but it doesn't give us incorrect results) for this case of 0101000000010011001.

However, calculateActionName is wrong. It tells us to insertLast.

--

We can obviously patch this, but the issue opens up some serious questions for us:

  1. From reading the iterative fuzzing process, it seems there is no guarantee of correctness -- is that true?
  2. How can we be confident there are no further issues like this?

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.