I think the greatest power in the relational model comes from its ability to directly represent cyclical dependencies without forcing weird workarounds. Many real-world domains have ambiguities regarding which types should be strict dependents of another. This confounds approaches relying on serialization. As mentioned in the paper, many major providers offer extensions to SQL which allow you to iterate through the graph implied by these relations with a single logical command.
> The impact of AI/ML on DBMSs will be significant
I agree with this but not in the way the authors may have intended. I think the impact will be mostly negative. The amount of energy being spent on blackbox query generator approaches could be better spent elsewhere. You can get extremely close, but this often doesn't matter.
> Do not ignore the out-of-box experience.
This is why everyone says to start with SQLite now.
Besides, the internal embedding for ChatGPT is per-token (~word), whereas the embedding used for RAG search is per-document (retrieval document might be small like a paragraph or page, or could be as large the the whole source document), so these wouldn't be usable for this purpose anyway
> One compelling feature of vector DBMSs is that they provide better integration with AI tools (e.g., Chat- GPT [16], LangChain [36]) than RDBMSs. These sys- tems natively support transforming a record’s data into an embedding upon insertion using these tools and then uses the same transformation to convert a query’s in- put arguments into an embedding to perform the ANN search; other DBMSs require the application to perform these transformations outside of the database.
I see that objection a lot and it is just weird to me. You save it to version control like you do any other program source code. SQL is just text.
I'm conservative with triggers. They have their place, but can definitely be abused. The problem arises when someone doesn't realize they are there, and updates start having unexpected (to them) side effects. I'll tend to prefer a stored procedure that is explicit about doing the main update and any needed side-effects.
On the other hand, the paper is kind of dismissive about engineering nuance and gets some details blatantly wrong.
- MapReduce is alive and well, it just has a different name now (for Googlers, that name is Flume). I'm pretty confident that your cloud bill - whether or not you use GCP, AWS, or Azure, is powered by a couple hundred, if not thousand, of jobs like this.
- Pretty sure anyone running in production has a hard serving dependency on Redis or Memcache _somewhere_ in their stack, because even if you're not using it directly, I would bet that one of your cloud service providers uses a distributed, shared-nothing KV cache under the hood.
- The vast majority of software is not backed by a truly serializable ACID database implementation.
-- MySQL's default isolation level has internal consistency violations[1] and its DDL is non-transactional.
-- The classic transaction example of a "bank transfer" is hilariously mis-representative - ACH is very obviously not implemented using an inter-bank database that supports serializable transactions.
-- A lot of search applications - I would venture to say most - don't need transactional semantics. Do you think Google Search is transactional? Or GitHub code search?
This is meant more as a pedagogical tool rather than a literal representation of how the system works. The intra-bank aspects of ACH absolutely do rely on serializable transactions.
I also think as a school the philosophy maybe to thoroughly solve the problem with out regard to speed because eventually computers will be faster.
I think the paper is just pointing out that anything great is going to migrate to the RM or SQL model. So that if you start there any feature missing will show eventually show up. They also point out how many resources go to deploying immature ideas.
> To a first approximation, MR runs a single query:
> SELECT map() FROM crawl_table GROUP BY reduce()
Or you could read the entire Google Mapreduce paper
WITH mapped as SELECT map() from crawl_table SELECT * FROM mapped GROUP BY reduce()
1. Map (key, value) -> (new_key, tmp_value)
2. Group by new_key
3. Reduce (new_key, all tmp_values for that key) -> (new_key, new_values)
In that respect, it's not that far from SQL with custom aggregates. I guess the most precise SQL representation would be SELECT REDUCE(MAP(t)) FROM foo GROUP BY KEY(MAP(t))
(I've both been on the MapReduce team, and worked on an SQL database. I don't honestly think they're that comparable.)Most systems use things like file extended attributes or a separate database to store such metadata; but I wanted something different. It needed to be able to attach tags to hundreds of millions of objects and find things that matched certain tags quickly.
I invented a key-value store to hold the metadata and got it working well. When it started to look like a big columnar store with sparsely populated rows; I decided to see if it could handle queries like a relational database. To my surprise it not only did it well, it could outperform many of them.
There are data models besides relational that can work extremely well for certain data sets.
But for my one hobby project, I'm using RDF and a triple store. Even with a "small" dataset, you can get an explosion of properties.
I want to be able to add arbitrary properties to arbitrary things and relate them all together. Build the graph organically.
So far, its working really well. But underneath, its (likely) just a couple of b+trees do all of the heavy lifting.
Aint that just neat?
But, for RDF its exactly what I want, I'm not interested in schemas and such for this work, so it's perfect for my scenario.
Need to do a non-trivial merge of complex domain graphs? Why have you tried string concatenating turtle files?
Same problem here.
But, given how many last names (not only in English, but many other languages too) derive from trade or profession monikers, I can't help suspect that at some time earlier in his family's history it was spelled differently. (Except of course if it was first written down in this form. But then I'd guess that was because spelling wasn't all that stabilised a few centuries ago, so what was meant was still what we'd write as "StonebrEaker".)
"Anyway, it's just a thought." (i.e. idle etymological speculation.)
> The ideal use case for blockchain databases is peer-to- peer applications where one cannot trust anybody. There is no centralized authority that controls the ordering of updates to the database. Thus, blockchain implementa- tions use a BFT commit protocol to determine which transaction to apply to the database next.
RDBMS and Lisp sit near the tao of their respective domains, which is why I advise people to stick with an RDBMS unless they have a really, really, really good reason not to. Or as Nik Suresh put it, "Just use Postgres. You nerd. You dweeb."
Compared to the strongly-typed deep embedding of SQL in Slick in Scala it is astonishing how useful something so simple can be.