[HN Gopher] Deno KV Is in Open Beta ___________________________________________________________________ Deno KV Is in Open Beta Author : samuba Score : 96 points Date : 2023-09-05 16:34 UTC (6 hours ago) (HTM) web link (deno.com) (TXT) w3m dump (deno.com) | joshstrange wrote: | I continue to watch Deno with excitement. I haven't had a good | use case to play with it yet (all my free programming time has | gone into my side business and I'm not ready to chance it on Deno | yet) but I'll keep looking. | | I find the way they handle secondary indexes very interesting. I | mean under the hood I think DynamoDB does pretty much the same | thing (stores the data multiple times) but instead of explicitly | writing the data multiple times you define fields on the data | that the secondary indexes use so the data is written there at | the same time it's written to the primary (I could be a little | mistaken, I'm working at a higher abstraction layer so I don't | think about that). I can't decide which approach I like more. I | will say that I don't think I'd need anything but my own | abstraction layer to work with Deno KV vs DynamoDB. That said I | still think DynamoDB is way more powerful overall. | | As always I'm rooting for Deno to succeed. | gsuuon wrote: | Deno gives me hope for web development. The security model, no | bundler and general pace of progress is great. They've | drastically improved node interop but if they could close the | gaps (and sort out extension/less imports) so many more | projects could finally jump ship over to Deno. | simonw wrote: | I poked around with this a few months ago to figure out how it | works locally. The answer is SQLite: | https://til.simonwillison.net/deno/deno-kv | | I'm finding the business model aspect of Deno KV absolutely | fascinating. const kv = await Deno.openKv(); | | That's a Deno core API. It works fine in the open source version | of Deno using a local SQLite database file. | | But as soon as you deploy your application to their proprietary | hosted service, that core API feature gets massively more | powerful. It's no longer a SQLite database, it's now a globally | distributed key/value store backed by FoundationDB, replicated | around the world. | | It looks like they've extended that idea further with the latest | version - you can now do this: export | DENO_KV_ACCESS_TOKEN="personal access token" | const kv = await Deno.openKv( | "https://api.deno.com/databases/your-database/connect", | ); | | And your local code is now able to manipulate that remote | FoundationDB database as well. | | I'm having trouble thinking of a precedent for this - an open | source project that has a core API which is effectively a lead | generator for their proprietary cloud service. | | I'm not entirely sure how I feel about it. I think I like it: | open source projects need a business model, and the openKv() | method is still a supported, useful part of the open source | offering. | | Kind of fascinating pattern though. | | UPDATE: I just found this page of docs | https://github.com/denoland/deno/blob/be1fc754a14683bf640b7b... - | which describes the "KV Connect" protocol they are using. It | looks like this evens the playing field, in that anyone could | implement their own alternative backend to Deno Deploy if they | wanted to. | | This firmly establishes me on the "I think this is cool" side of | the fence. | lobstrosity420 wrote: | > I'm having trouble thinking of a precedent for this - an open | source project that has a core API which is effectively a lead | generator for their proprietary cloud service. | | Is this not Vercel's entire business model? I don't think they | invented it either. | lioeters wrote: | I suppose it's a variation on the "freemium" model. | decodr wrote: | NextJS / Vercel is not the same thing but shares similar | approach | ilrwbwrkhv wrote: | This is the enshittification of open source. | | It has been happening for a while with a bunch of startups like | Supabase claiming to be "open source" and marketing themselves | as such but making it really hard to self host for a long time. | | It wasn't just them either. | | I would see with disgust a bunch of startups use "open source" | as their marketing tactic, no matter how hard it was to setup | or run without their hosted service. | | It is also a peverse incentive: the harder the open source | system is to run and maintain, the more you will gravitate | toward their cloud. Supposedly open source companies raising a | ton of money from VC is also strangely contrary to the open | source ethos. | | Deno KV is basically the next jump in that chain. | | Richard Stallman was right once again, as usual. | LASR wrote: | > This is the enshittification of open source. | | You can simply not use it, no? | | I am not going to make any sweeping generalizations across | all products. But at least in the case of Deno KV, there | doesn't seem to be lock-in. So if you were running something | self-hosted for KV persistence, it will continue to work | unmodified. | | > I would see with disgust a bunch of startups use "open | source" as their marketing tactic. | | Again, not sure which bunch of startups. But I am not seeing | that with this product. Seems more like a survival strategy | to add some cashflow behind the developers. | | I am curious what you think Open Source should be (or should | not be). I think it's fair that running a service in the | cloud should cost something. And self-hosting it, I think | it's fair that it requires a bit more effort than using the | hosted service. | Matl wrote: | One does not have to use/not use something to have valid | criticisms of it/opinions about it [1] | | 1 - https://i.kym- | cdn.com/entries/icons/original/000/036/647/Scr... | satvikpendem wrote: | That meme doesn't further your point because the peasant | is "using" society and understands the problems with it. | Matl wrote: | My point with the meme link is that you can respond to | any complaint about anything with a 'gotcha' argument | that's ultimately invalid. | satvikpendem wrote: | Seems like you can similarly respond to any complaint | with that meme too, which is also invalid. In reality, | there is a lot more nuance than can be described by | pithiness. | accoil wrote: | Isn't that the reverse? It's against the sentiment that | being a part of system means that you implicitly agree | with it, and any complaints you make about it are void. | simonw wrote: | Does this change your mind at all? https://github.com/denolan | d/deno/blob/be1fc754a14683bf640b7b... | | It looks to me like they've documented the KV Connect | protocol they invented to support this feature, in enough | detail that anyone else could build an alternative backend | for it. | | This has helped me feel completely OK with how they're | handling this. They get an advantage in that they've already | built an extremely robust proprietary backend, but I find | that acceptable given the documented protocol. | crabmusket wrote: | I think this is great, except I feel odd that it's just | hanging around on the Deno global instead of being e.g. | imported like any other database client. | import KV from "https://deno.land/kv" // for example | | If their protocol is indeed open and usable with your own | backend, then that library should be able to work for | anyone. And if they need some fancy native performance then | maybe they could intercept that import when running code on | Deno Deploy? | | Treating their hosted service as "part of the runtime" | which is what the Deno global tends to be for is the only | remaining ick factor for me. | phillipcarter wrote: | > This is the enshittification of open source. | | I'm really confused by this statement. What exactly is being | degraded in their service? Or in their API? Or in the | underlying tech they are compatible with? | | All I see here is an open source system that you can manage | and deploy yourself, with a 100% compatible API for a cloud | service that handles that for you, should you decide to pay | money to have that problem solved for you. | | I find your comment to be quite dramatic. | explaininjs wrote: | Cloudflare KV is basically the exact same. Even the same name. | | Cloudflare's pricing seems more reasonable, though a 1:1 | comparison is impossible. Cloudflare reads and writes in every | region for the same price, Deno scales price with number of | replica regions. Also CF is billed per read/write operation | (and supports listing), this is billed per kB read/written. | | That all said, if your values are bigger than ~2kB Cloudflare | is almost certainly cheaper. And the list (with metadata) | operation is quite powerful. | | However, single-region means you don't have to care about | synchronization nearly as much, which can be quite annoying. | The end user experience will suffer in areas far from your | write zone though. | | A better comparison might actually be Cloudflare D1, a hosted | SQL with per-kB fees, but that's still beta. | lucacasonato wrote: | Yes, Deno KV is much closer to D1 than to Cloudflare KV. | ramesh31 wrote: | Why does a KV store need SQLite? Does it provide | transactionality? | teacpde wrote: | SQLite is superb choice as a local storage solution, you | don't need a transactionality requirement to use it as a KV | store. | | People choose NoSQL databases primarily for scaling reasons, | which is not the problem here. | simonw wrote: | What would you use instead? | | By the time you've implemented even a basic key-value store | with on-disk storage you've probably written a bunch of code | that would be unnecessary if you had used SQLite. | crabmusket wrote: | LMDB? | ianbicking wrote: | I like this too... it's practical API but there's no way you | can actually provide this production API for free. So instead | of an open source project pulling back stuff you'd expect to be | free (because it has zero marginal cost), they are adding stuff | in that makes sense to be paid. | windowshopping wrote: | I don't know enough about this to make any real nuanced comments, | but I hope they clean up this import cuz this is ugly: | | > import { Semaphore } from | "https://deno.land/x/semaphore@v1.1.2/semaphore.ts"; | | Should just be~ | | > import { Semaphore } from "deno/utils"; | | Or something like that. | brundolf wrote: | Deno has various mechanisms[0] for abbreviating your imports | if/how you want to, but I like the fact that the canonical | paths are plain, full URLs | | [0] https://deno.land/manual@v1.36.4/basics/import_maps | blitz_skull wrote: | Yeah, it's actually a _feature_ if you've never been lost in | the shit show that is node_modules before. I highly prefer | Deno's style. | simonw wrote: | What syntax would you suggest for importing a specific version | of a library? | windowshopping wrote: | import ... from "dino@1.1/utils" | | idk i just think there's many options besides a full url in | your code | [deleted] | paxys wrote: | Is "Deno KV" a feature of Deno the runtime or Deno the hosting | provider? The docs aren't clear about what it actually is, and | that makes me a bit wary when deciding to use it. | [deleted] | simonw wrote: | It's both. I wrote some notes on that here: | https://til.simonwillison.net/deno/deno-kv | sgammon wrote: | congrats to the deno team on launching this :) | lucacasonato wrote: | Thanks <3 | dang wrote: | Related: | | _Deno KV_ - https://news.ycombinator.com/item?id=35743446 - | April 2023 (11 comments) | debrateo wrote: | Congrats on the launch! | lucacasonato wrote: | I worked on some of this - happy to answer questions :) | simonw wrote: | Typo in your blog post: "first processed at the primary pegion" | neals wrote: | Is it like a businessmodel for Deno? | lucacasonato wrote: | Yes, the hosted KV solution built into Deno Deploy is one of | the ways Deno makes money. | dabeeeenster wrote: | What's the cost of additional read regions? | lucacasonato wrote: | Storage cost + write ops are multiplied by region count | simonw wrote: | When you run `kv = await Deno.openKv()` locally it opens a | SQLite database. On Deno Deploy it opens a connection to | FoundationDB. How does that mechanism work? Is it using the | same URL mechanism as the new Deno.openKv(URL) thing? | lucacasonato wrote: | Yes, sort of - on Deno Deploy the authentication doesn't come | from a token in env vars, but from intrinsic security tickets | baked into the Deno Deploy system. Also, it's a bit faster on | first connect, because compared to KV connect we can skip the | metadata exchange[1] because the information it provides is | already present in Deno Deploy through other means. Both the | backend service and frontend API (JS->KV) is the same though | :) | | [1]: https://github.com/denoland/deno/blob/be1fc754a14683bf64 | 0b7b... ___________________________________________________________________ (page generated 2023-09-05 23:01 UTC)