4 ms·
Very nice! I've been prototyping something server-side in the style of the SQL Kappa architecture: facts on immutable logs, possibly keyed (and compactable by
by BenoitP 5y ago
Very nice!
I've been prototyping something server-side in the style of the SQL Kappa architecture: facts on immutable logs, possibly keyed (and compactable by key), and SQL materialized views streaming the updates with Flink. And I'm in search of a React state manager in that philosophy.
Rows are sent to each client requesting a feed of them:
INSERT INTO user_orders_total_feed(user_id, data)
SELECT
uo.user_id,
SUM(o.price) total
FROM user_order uo
JOIN order o ON uo.user_id = o.user_id
JOIN user_live_subscription uls ON uo.user_id = uls.user_id
GROUP BY uo.user_id
WHERE uls.subscription_topic = 'orders_total'
But: maybe you want all the orders in the UI and do the aggregation client-side, to have all orders alongside the total. You could move the aggregation to the client side. And it would be great to have the same data language than on the server (so that business rule expression is the same).
In that case, a React Hook library like SimpleR State could aggregate in SQL the sum and update the view reactively. It would look like:
const TotalView = () => {
const view = state.view('SELECT SUM(price) total FROM order_feed');
return (
<>
<div>{view.total}</div>
</>
)
}
I don't think that would be easy to do; but I think there is a market for it: The business folks doing no-code+SQL client-side, and they would sometimes ask through proper channels for a query to be computed globally server-side or be brought client-side.
- aenero 5y agoAlthough this is not provided by SimpleR State out of the box, the library makes it easy to implement a "selector" function that accepts an SQL query, and pass this selector to the entity hook. This SQL query syntax in React can well be a library on its own, I suppose.
- BenoitP 5y agoWould that be the transform function from here [1]? I do agree too that this definitely should be a library on its own. Anyway thanks for your work; I'll definitely check SimpleR in my project. [1] https://github.com/arnelenero/simpler-state/blob/f6336817c9e3b0eeb56c28e64e7cbb4c12c9500a/docs/recipe-transforms.md https://github.com/arnelenero/simpler-state/blob/f6336817c9e...
- aenero 5y agoYes, I called it "transform function" in the documentation to reflect the more general functionality that also includes computed values, apart from selection ("picking" properties). Thanks for your encouraging feedback.
- vaughan 5y agoI think SQL on the frontend is a big opportunity. It’s a powerful declarative language that matches nicely to React. Every component’s data requirements are essentially an SQL query, and a lot of client-state could probably be represented in further SQL queries (filtering, aggregation). Doing joins makes things much more consistent too when the same entities are referenced in multiple places in the UI. Just like React works declaratively by re-rendering the virtual dom, wouldn’t it be great if we just re-ran a declarative query for the data too? Kind of like Redux (global state) I guess but a relational model version.