clockworklabs / spacetimedb Goto Github PK
View Code? Open in Web Editor NEWMultiplayer at the speed of light
Home Page: https://spacetimedb.com
License: Other
Multiplayer at the speed of light
Home Page: https://spacetimedb.com
License: Other
I noticed this line at the top of the readme:
"You can think of SpacetimeDB as both a database and server combined into one."
This is confusing to me, I think it should read:
"You can think of SpacetimeDB as both a database and application server combined into one."
A server could be anything! Initially I thought you wanted to replace the OS as well.
> spacetime call healthcheck add "Person"
Error: Invalid arguments provided for reducer `add` for database `healthcheck` resolving to address `c03cf2995c5bf56ac7cda1f5064b663c`.
The reducer has the following signature:
add(name: String)
Caused by:
0: Response text: invalid arguments for reducer add: .: expected value at line 1 column 1
1: HTTP status client error (400 Bad Request) for url (https://testnet.spacetimedb.com/database/call/c03cf2995c5bf56ac7cda1f5064b663c/add)
/tmp/spacetime/healthcheck โฏ spacetime call healthcheck add "[Person]"
Error: Invalid arguments provided for reducer `add` for database `healthcheck` resolving to address `c03cf2995c5bf56ac7cda1f5064b663c`.
The reducer has the following signature:
add(name: String)
Caused by:
0: Response text: invalid arguments for reducer add: [0]: expected value at line 1 column 2
1: HTTP status client error (400 Bad Request) for url (https://testnet.spacetimedb.com/database/call/c03cf2995c5bf56ac7cda1f5064b663c/add)
When mutating subscribed tables spacetimedb does not trigger on_insert
, on_update
or on_delete
events when using spacetime sql
or HTTP SQL API interface, it seems these events fire currently only when using rust-land functions inside server-side code.
Create server-side module that creates User and adds it to the table in identity_connected
, when we connect, the user gets inserted and on_insert
on the client-side triggers correctly, but when we call e.g spacetime sql spacetime "DELETE FROM User"
the User::on_delete
listener does not trigger at all but it would trigger if we deleted the record using server-side User::delete
or User::delete_by_
function.
mod module_bindings;
use module_bindings::*;
const URI: &str = "http://localhost:3000";
const DB_NAME: &str = "spacetime";
use spacetimedb_sdk::{
identity::on_connect,
on_subscription_applied, subscribe,
table::{TableType, TableWithPrimaryKey},
};
fn main() {
User::on_insert(|user, _| println!("User inserted: {:?}", user));
User::on_delete(|user, _| println!("User deleted: {:?}", user));
on_connect(|_| subscribe(&["SELECT * FROM User;"]).expect("Subscribe failed"));
connect(URI, DB_NAME, None).expect("Connect failed");
loop {}
}
We need benchmarks that exercise the query engine (currently only SQL) including subscriptions.
We would like to experiment with running this in the socket runtime. I realize there is a wasm version but im interested in the high performance version of this, is there a C++ port somewhere already started?
Hi there -
A few things I noticed for the TypeScript QuickStart:
useRef
is used in the code but not imported, I added it to the import on line 1, so it is now import React, {useEffect, useState, useRef} from "react";
var user = User.filterByIdentity(local_identity?.current?.toUint8Array()!);
It should not be converted to a Uint8Array, so the line I got working was: var user = User.filterByIdentity(local_identity?.current!);
tsconfig.json
file that was generated by create-react-app
to say target=es6
in order to get the iterators to work. I'd suggest changing the instruction to tell folks they'll have to do that, as it doesn't appear to be possible to make it es6 as part of create-react-app
.var identityStr = new Identity(user.identity).toHexString();
it does need to be converted to match the constructor, so the line I got working was: var identityStr = new Identity(user.identity.toUint8Array()).toHexString();
var spacetimeDBClient = new SpacetimeDBClient("ws://localhost:3000", "chat", token);
the text says 'replace <module_name>
with the name you chose', but <module_name>
isn't in the code, it's hard-set to chat
. So I believe that line should be var spacetimeDBClient = new SpacetimeDBClient("ws://localhost:3000", "<module_name>", token);
local_identity
isn't a very Typescript-y variable name, so it should probably be tweaked to localIdentity
or something like that.It's possible this Issue should be over in this repo, since thats where this example code lives, but I'm not sure.
I think that's all the tweaks I had to make to get it running. I hope that helps! ๐๐ป
One general piece of feedback would be to put working versions of the whole thing into a repo somewhere so it can be copied in one go rather than pieced together. I like the explanations a lot, but some of the "go back to this function and add this line" stuff was a bit tricky. I see there is a PR on the typescript-sdk repo that tries to do this, but has extra stuff.
Cheers!
sometimes when publishing (with clear fwiw) you get this error:
WARN crates/client-api/src/routes/subscribe.rs:177: error closing: WebSocket protocol error: Sending after closing is not allowed
and after that no new connection (including logs) can be made until you clear and re-publish
update: this seems to happen when you publish with clear flag while there's a connected client (like editor window that we always have running)
device: Apple M1 Max
im following the quickstart guide (https://spacetimedb.com/docs/server-languages/rust/rust-module-quickstart-guide)
when i try to publish the module, i get this: (reduced by a lot)
error[E0425]: cannot find function, tuple struct or tuple variant `Ok` in this scope
--> /Users/cc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/gimli-0.27.3/src/read/mod.rs:676:13
|
676 | Ok(Register(y))
| ^^ not found in this scope
error[E0425]: cannot find function, tuple struct or tuple variant `Err` in this scope
--> /Users/cc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/gimli-0.27.3/src/read/mod.rs:678:13
|
678 | Err(Error::UnsupportedRegister(x))
| ^^^ not found in this scope
Some errors have detailed explanations: E0405, E0412, E0425, E0433, E0463, E0531.
error: could not compile `gimli` (lib) due to 1892 previous errors
Error: command ["cargo", "--config=net.git-fetch-with-cli=true", "build", "--target=wasm32-unknown-unknown", "--release", "--message-format=json-render-diagnostics"] exited with code 101
im on rust 1.71, not sure how to fix
This is a mix of server/protobuf/C# client SDK issues, but I'm sticking them all here for now.
There are three cases I'm aware of:
Subscribe
calls are not reported to the client at allIn the quickstart dotnet project , replace the line:
SpacetimeDBClient.instance.Subscribe(new List<string> { "SELECT * FROM User", "SELECT * FROM Message" });
with
// this will cause an unreported server error
SpacetimeDBClient.instance.Subscribe(new List<string> { "SELECT * FROM HI MY NAME IS JAMES User", "SELECT * FROM Message" });
// invoking Subscribe again will succeed, and the client will proceed as if nothing has happened
SpacetimeDBClient.instance.Subscribe(new List<string> { "SELECT * FROM User", "SELECT * FROM Message" });
Then spacetime start
, spacetime publish chat2
in quickstart/server
, and dotnet run
in quickstart/client
.
Server logs:
2023-08-25T18:19:08.124171Z TRACE crates\client-api\src\routes\subscribe.rs:232: Received heartbeat from client ClientActorId(90cf6f2168def766e073b6bedf063aea07785fd751a625fde7dec9d5d26dde3e/0)
2023-08-25T18:19:08.265946Z ERROR crates\core\src\subscription\module_subscription_actor.rs:66: error occurred in ModuleSubscriptionActor: SqlParserError: sql parser error: Expected end of statement, found: NAME, executing: `SELECT * FROM HI MY NAME IS JAMES User`
2023-08-25T18:19:38.118225Z TRACE crates\client-api\src\routes\subscribe.rs:232: Received heartbeat from client ClientActorId(90cf6f2168def766e073b6bedf063aea07785fd751a625fde7dec9d5d26dde3e/0)
Client logs do not mention this error.
For example, if you run an unaltered quickstart project, wait for a server connection, and then press "enter", the server will reject the message because it's programmed to reject empty messages. The user will be told about this with an Event
with status
set to failed
. However, it isn't logged by default, the user has to dig the error out of the protobuf by hand. This is a pretty easy client-side fix.
Inline the C# sdk into the C# quickstart project, i.e.:
remove the line <PackageReference Include="SpacetimeDB.ClientSDK" Version="0.6.0" />
from quickstart/client/client.csproj
copy spacetimedb-csharp-sdk/src
to quickstart/client/sdk
In the file quickstart/client/sdk/SpacetimeDBClient.cs
, change the line
webSocket.Send(Encoding.ASCII.GetBytes("{ \"subscribe\": { \"query_strings\": " + json + " }}"));
to
webSocket.Send(Encoding.ASCII.GetBytes("{ \"subscrib\": { \"query_strings\": " + json + " }}"));
Then spacetime start
, spacetime publish chat2
in quickstart/server
, and dotnet run
in quickstart/client
.
Server logs:
2023-08-25T18:42:52.908700Z TRACE crates\client-api\src\routes\subscribe.rs:232: Received heartbeat from client ClientActorId(90cf6f2168def766e073b6bedf063aea07785fd751a625fde7dec9d5d26dde3e/0)
2023-08-25T18:42:53.012411Z DEBUG crates\client-api\src\routes\subscribe.rs:216: Client caused error on text message:
unknown variant `subscrib`, expected one of `call`, `subscribe`, `one_off_query` at line 1 column 12
2023-08-25T18:42:53.018879Z TRACE crates\client-api\src\routes\subscribe.rs:247: Close frame Some(CloseFrame { code: Normal, reason: "" })
2023-08-25T18:42:53.020439Z DEBUG crates\client-api\src\routes\subscribe.rs:251: Client connection ended
Note that the close frame comes from the client, not the server! This means that the server must have told the client to terminate the connection somehow. None of this is visible in the client logs.
~/.spacetime
spacetime identity remove --all --force
quickstart/server
, spacetime publish chat2
quickstart/client
, dotnet run
The server will log a rejected JSON web token:
2023-08-25T19:18:41.090945Z TRACE crates\client-api\src\auth.rs:149: Authorization rejection: Jwt(InvalidSignature)
but the client receives no indication of this.
On further reflection, I'm not sure 3 is worth fixing. 1 and 2 are relatively easy. 3 has more to do with malformed handshakes and low-level protocol messages, which aren't things that are very user-facing.
I guess it might be worth adding a generic ProtocolError
protobuf, which would work for 3A. I have no idea about 3B.
For game analytics we need a mechanism to stream the db transaction log
Apple M1 / Ventura
XCode installed
clang version 14.0.3 (clang-1403.0.22.14.1)
rustc 1.71.1 (eb26296b5 2023-08-03)
mkdir quickstart-chat
cd quickstart-chat
spacetime init --lang rust server
cd server
cargo build
error: linking with cc
failed: exit status: 1
= note: LC_ALL="C" PATH="/
......
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation
Apparently linking some C code together doesn't work.
What fixed the issue for me was creating a cargo config file
vi ~/.cargo/config
and adding the following:
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
[target.aarch64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
Then cargo build finishes:
cargo build
...
Finished dev [unoptimized + debuginfo] target(s) in 13.67
Would be great to see this kind of stuff in a troubleshooting document or FAQ.
Remove table scoped Header
field from RelValue
which represents a single row in the query engine.
Derek Brinkmann:
C# modules that use Camel case are not generated in snake case. NOTE: This is working in Typescript SDK
Hi! I am looking for database witch able to work without internet connection only with local data. And with ability to sync data between local storage and server when connection return online.
Is SpacetimeDB fits?
We have this definition in crates/bindings/src/lib.rs
:
/// Erase the `R` type parameter from the token.
///
/// In other words, forget what reducer this is for.
#[inline]
pub fn erase(self) -> ScheduleToken {
ScheduleToken::new(self.id)
}
It seems unused so it's unclear if it should be provided.
From the Discord:
PS G:\GitHub\spacetime_sandbox\quickstart-chat\server> spacetime call chat-server send_message '["Hello"]'
Error: Invalid arguments provided for reducer `send_message` for database `chat-server` resolving to address `5ebd1221afb10aaf61d6c8a527413d82`.
The reducer has the following signature:
send_message(text: String)
Caused by:
0: Response text: invalid arguments for reducer send_message: [0]: expected value at line 1 column 2
1: HTTP status client error (400 Bad Request) for url (http://localhost:3000/database/call/5ebd1221afb10aaf61d6c8a527413d82/send_message)
Okay, this issue is about libc / bindgen.
spacetime init --lang=rs bindgen
cd bindgen
cargo add rand
spacetime build
Fixed wasm build error with adding getrandom to cargo.toml, as stated in the manual.
getrandom = { version = "0.2", features = ["js"] }
Added the following to lib. rs.
use spacetimedb::{spacetimedb, ReducerContext, println};
use rand::Rng; // 0.8.5
#[spacetimedb(init)]
pub fn init() {
let num = rand::thread_rng().gen_range(0..100);
println!("{}", num);
}
spacetime build
Error: wasm-bindgen detected.
It seems like either you or a crate in your dependency tree is depending on
wasm-bindgen. wasm-bindgen is only for webassembly modules that target the web
platform, and will not work in the context of SpacetimeDB.
To find the offending dependency, run `cargo tree -i wasm-bindgen`. Try checking
its cargo features for 'js' or 'web' or 'wasm-bindgen' to see if there's a way
to disable it.
In a nutshell, rand requires libc, which is supposed to be handled by wasm-bindgen, which is not allowed in SpaceTimeDB.
That also categorically rules out most if not all crypto crates since they rely on libc for random number generation.
Conventionally when I work with a normal DB, I have to encrypt some user data for legal compliance reasons. As I understand it now, I cannot do that with the wasm modules meaning I would have to generate client bindings, encrypt elsewhere, and do basically the exact same as I would do with a normal relational DB.
Questions:
The guys at ICP had almost an identical issue with their WASM runtime for canisters, but eventually provided encryption through the API with some weirdo keyless algorithm. Meaning, it can be solved, but none of the options is particular easy.
I understand it's early days and much of these issues result from the rather mixed WASM implementation in Rust (WASM-unknown vs WASM-wasi), but some guidance on the libc issue would be very much appreciated since the absence of cryptography has a very meaningful impact on application architecture.
I believe this is a drop in replacement to JWT but this could allow for attestations to a user/pid allowing for finer grained control using the same token strategy.
For example in the Payload of the JWT we just add a signed attestation by some trusted authority like so
{
"iss": "did:key:theserversDID/PublicKey",
"aud": "did:key:ourPublicKey",
// Time bounds of token
"nbf": 1529496683,
"exp": 9256939505,
"att": [
{
"with": "servername/DB",
"can": "READ"
}
],
"prf": []
}
Possibly if I have time :)
I was trying to run spacetimedb on Docker in a default GitHub Codespace, and apparently the image is only built for arm64. To work on intel CPUs, the image needs to be multi-arch on Dockerhub.
$ docker run --name spacetimedb clockworklabs/spacetimedb:latest start
Unable to find image 'clockworklabs/spacetimedb:latest' locally
latest: Pulling from clockworklabs/spacetimedb
fc9ce7290e7e: Pull complete
be081aa8c78b: Pull complete
3ee2becf8478: Pull complete
Digest: sha256:3415fd15cdcbc25e36ee0ca4c9a7dd0af949629a3fb18818885e275e844427f6
Status: Downloaded newer image for clockworklabs/spacetimedb:latest
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
$ docker logs spacetimedb
exec /usr/local/bin/spacetimedb: exec format error
On the landing page it says:
The reason for the name SpacetimeDB is that we store a full-transaction history for your application. This lets you reset the state of your database to any previous point in time and replay transactions from there. This means you get replays for free. It's basically time-travel, and it's very cool.
I'm quite curious about these features, but I haven't seen them mentioned in the docs. How can I found out more about them? I do hope you'll document these soon! ๐
We current use Keccak256 for computing a product value's DataKey. This can account for over 90% of the cost of generating the DataKey in some cases, the other portion being the bsatn encoding. Note this hash is invoked once for each row, both on the write path as well as the read path.
Is a cryptographic hash necessary for identifying rows? Can we use something cheaper?
Clients can lose connection to the server for a variety of reasons. We need to deal with this behavior in client SDKs.
Things we may want:
Client SDKs:
To ensure consistent expectations BSL 1.1 enforced limitations on eg Change Date and Change License.
First, we set a cap of four years for the duration of the time window prior to code becoming FOSS. That said, we encourage a shorter window (and for MariaDB MaxScale, the window is between two and three years).
Current change date seems to be 5 years into the future: https://github.com/clockworklabs/SpacetimeDB/blame/8eb1743b75435c7b3b9ea7179c923262105b2b2b/LICENSE.txt#L24
One year more than the max allowed under BSL 1.1
Second, we now require the Change License to be GPL compatible with either GPLv2, GPLv3, or any other license that can be combined properly with GPL software
AGPL 3.0 is set as the change license: https://github.com/clockworklabs/SpacetimeDB/blame/8eb1743b75435c7b3b9ea7179c923262105b2b2b/LICENSE.txt#L26
Though AGPL 3.0 is not a GPL 2.0 compatible license: https://www.gnu.org/licenses/license-list.en.html#AGPLv3.0
Hence violators this part of the BSL 1.1:
software provided under the Change License can be included in a program with software provided under GPL Version 2.0 or a later version
On top of this, you are using a modified AGPL 3.0 license even, which I would highly discourage, as modified licenses by their very nature are not OSI approved and sets unclear expectations and has unclear compatibility with other licenses.
To be able to build the analytics we need for the game we need additional information to be available in the transaction log. Currently only db operations are stored.
The bare minimum extra information we would need is some way of identifying which reducer ran, and the timestamp of the transaction.
Reducer parameters would also be useful but not absolutely necessary.
Edit. Reducer parameters would actually be important currently because they contain the actor which is needed to know which player called the reducer.
$ RUST_BACKTRACE=full spacetime energy status thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /data/data/com.termux/files/home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/spacetimedb-cli-0.6.0/src/subcommands/energy.rs:98:68
stack backtrace:
0: 0x5a4654f848 - <unknown> 1: 0x5a46595498 - <unknown> 2: 0x5a46567a60 - <unknown> 3: 0x5a4654f650 - <unknown>
4: 0x5a4656bc50 - <unknown>
5: 0x5a4656b868 - <unknown>
6: 0x5a4656c2e4 - <unknown>
7: 0x5a4654fe68 - <unknown>
8: 0x5a4654f954 - <unknown>
9: 0x5a4656beb8 - <unknown>
10: 0x5a4658bed4 - <unknown>
11: 0x5a4658bf44 - <unknown>
12: 0x5a4557af9c - <unknown>
13: 0x5a453659f0 - <unknown>
14: 0x5a45387894 - <unknown>
15: 0x5a453300e4 - <unknown>
16: 0x5a45406eec - <unknown>
17: 0x5a453d5794 - <unknown>
18: 0x5a4531a56c - <unknown>
19: 0x5a4531ac94 - <unknown>
20: 0x5a46563b74 - <unknown>
21: 0x5a453d5880 - <unknown>
22: 0x7c8f7d0a38 - <unknown>
On M1 Mac with Ventura (13.4)
brew install clockworklabs/tap/spacetime
Results in:
Error: spacetime: SHA256 mismatch
Expected: 64534d142f6618c7bb6be9a0b19f7b7185069cb842afa0df086d1e2fcf7e7f29
Actual: 40c553be7246d709a08ccf07a20e73db2503127853c256b3de9fff4a95062db2
Looks like somehow the binary was updated without updating the hash.
Any idea?
The current PrimaryKey
type is just a wrapper for DataKey
which uniquely identifies each row in the database. It is not a column or row attribute and therefore does correspond to a traditional primary key in a relational database. We should remove to avoid confusion.
Currently we have an iterator for equality index scans supporting equality predicates, i.e point queries. We need a similar iterator to support range predicates.
The protocol should be embedded in the URI argument
Using the SpacetimeDB CLI v0.6.1 on Windows, following https://spacetimedb.com/docs/spacetimedb-cloud.
It instructs the user to execute
spacetime server set 'https://testnet.spacetimedb.com'
but this returns Error: Invalid protocol: 'https
The user needs to execute it without the quotes for it to work:
spacetime server set https://testnet.spacetimedb.com
Depends on #296.
Incorporate storage level index range iterators into query execution.
All queries for a particular subscription are evaluated within a single thread of execution. An orders of magnitude speedup can be achieved using a multithreaded execution model. Not this will require some refactoring of the datastore as currently a query acquires a global exclusive lock in order to run.
See
SpacetimeDB/crates/sats/src/algebraic_value.rs
Lines 373 to 386 in c3526ee
Hi!
There are a lot of examples of different software, where PGO helps a lot with performance - you can check it here. E.g. in this list are a lot of databases like Redis, MongoDB, and PostgreSQL.
We need to check the PGO effects on SpacetimeDB, and if it works well - write a note in the SpacetimeDB documentation about PGO. I'd appreciate your providing an easy way to build SpacetimeDB with PGO. And experienced users will be able to do it on their own for their own usage scenarios. Another option is to optimize SpacetimeDB build with a generic-enough profile. Providing PGO-optimized binaries could be a trickier task (since it requires preparing a good-enough profile) but as an option would be great to see too. Also, you even could optimize distributed from the official sites binaries with PGO (if would be able to collect a generic-enough profile).
As an additional optimization, I suggest looking at LLVM BOLT. But from my experience, starting with PGO and then using BOLT would be better.
For the Rust projects, I recommend starting with cargo-pgo.
I understand that the project is still in the early development stages. So I think the issue is just an improvement idea for future developments.
Tyler: We should use the Apache 2.0 license
Queries and subscriptions currently default to full table scans. We should incorporate index scans into query planning and utilize them when appropriate.
Hello, a quick question: how does this scale on multiple nodes? is there a cluster mode? I couldn't find any info on that.
Trying to install spacetime on Linux, I ran into missing dependencies.
My steps were:
curl --proto '=https' --tlsv1.2 -sSf https://install.spacetimedb.com | sudo sh
in the terminalspacetime
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3435 100 3435 0 0 9703 0 --:--:-- --:--:-- --:--:-- 9703
This script will install the spacetimedb-cli command line tool. platform=linux-amd64 os=linux
Press [enter] to install the spacetimedb-cli binary. Use Ctrl-C now to exit.
Downloading from https://install.spacetimedb.com...
Extracting...
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.quarantine'
Default: /usr/bin/spacetime
If you do not have sudo access for your computer, we recommend using /home/root/bin/spacetime
Press enter or provide the full install path you would like to use:
copied '/tmp/tmp.ymLB5CTR6I/spacetime' -> '/usr/bin/spacetime'
removed '/tmp/tmp.ymLB5CTR6I/spacetime'
spacetime is installed into /usr/bin/spacetime Note: we recommend making sure that this executable is in your PATH.
The install process is complete, head over to our quickstart guide to get started!
https://spacetimedb.com/docs/quick-start
codespace@codespaces-7030e8:/workspaces/spacetime:(main *)$ spacetime
spacetime: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by spacetime)
spacetime: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by spacetime)
spacetime: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by spacetime)
How to deploy distributed SpacetimeDB on the server side.
I've just tried your demo's to get a feel for your system, and I ran into a few issues (running WSL2, Ubuntu 22.04, node.js 18.17). Perhaps you can update the documentation.
Rust server
pkg-config
in order to get the example to compile (Open SSL issue): sudo apt install pkg-config
.spacetime identity remove --all --force
spacetime delete <module-name>
Rust client
Typescript client:
npm i react-scripts@latest
.user.identity.toUint8Array()
tsconfig.json
needed to be updated: target: ESnext
.npm start
command starts the client on port 3000, which is a bit annoying, since spacetime is using the same port.Congratulations! You've built a simple chat app with SpacetimeDB. You can find the full source code for this app [here](https://github.com/clockworklabs/spacetimedb-typescript-sdk/tree/main/examples/quickstart)
. However, that page no longer exists.Currently subscriptions compute the RowID for each row returned in the result set. This can account for upwards of 50% of the execution time.
Table access methods should return the RowIDs along with the rows themselves which would minimize the need for queries and subscriptions to recompute them.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.