I was recently talking to a German start-up that was in an accelerator programme. They are building a product which is a distributed database that they are proposing will have efficiency benefits over companies which keep their data on their own centralized database. They talked about leveraging the computational capacity of different computers in the company to increase efficiency. From what I know about distributed computing, it is more inefficient than having a centralized architecture. Are there scenarios where it provides some efficiency benefits and is this being applied?
The only systems which benefit from being distributed are ones that display the property of being "embarrassingly parallel", or some approximation of it. Tasks which do not require a significant amount of data to be transmitted between operating systems, or those which don't require a significant amount of coordination fit this description well. Typically anything like a database is poorly suited to being distributed due to the need for overall consistency, which is very difficult to achieve across a distance.
Bitcoin is the opposite of a distributed system at the node level, every participant in the system is expected to repeat the process of validation in perfect accuracy with the hundreds of thousands, or millions of previous attempts at synchronization that have happened before it. As the number of nodes increases, there is no change in the amount of computation done in either direction.
Generally speaking anything claiming to improve efficiency by using a decentralized, or distributed network should be met with skepticism, simply because this is typically an uphill battle that is taken on for other reasons despite its inefficiency, not in an attempt to gain efficiency. To exemplify this, Bitcoin would be most efficient, most usable, and most reliable if it ran on a single server, but that would largely defeat the design brief of being trust-less.
Yes, there are several distributed-computing projects that let people donate otherwise-idle CPU time to the project.
(Note that with modern computers, that means also donating amount of electricity (30 to 80 Watts), because actually-idle CPUs / GPUs use (much) less power than when fully loaded. If you already heat your home with electricity, having your computer make the heat doesn't cost you anything extra, otherwise it add to your power bill. And extra air-conditioning if you're using more electricity to move the heat out of your house).
- science: SETI@Home processing radio telescope data looking for signals for alien civilizations
Folding@Home: a distributed computing project for disease research that simulates protein folding, computational drug design, and other types of molecular dynamics.
- math: Mersenne prime searching: prime95
- crypto brute force challenges like https://www.distributed.net/RC5.
I'm sure there are more, those are just the few that I can think of off the top of my head.
distributed.net was one of the early pioneers of this form of distributed computing, where a central server can hand out work units for home computers and otherwise-idle servers to crunch on for hours, eventually sending back a bundle of results and fetching new ones. All of the projects I listed use that same model.
They motivate people to keep their computers contributing by running a leaderboard for contributions, and let users make teams. A little bit of gamification can get people to put in the effort to set up the software on some extra computers that they wouldn't otherwise. (Of course there's also the reward of contributing to something useful or interesting.)
To prevent cheating / corruption, the central servers will sometimes hand out the same block or chunk of data to multiple users, and compare the results. For some problems, the client can compute a proof-of-work result as it goes, basically a hash of some internal result while crunching, which it couldn't compute much more efficiently without having gone through all the steps of the actual computation. This allows the server to detect cheating clients that try to win the leaderboards (or just sabotage the project) by sending back work units as complete without actually having done the work. For some projects, like prime searching, the actual result is just a "no primes in this range", which is obviously trivial to fake.
All of the problems this model is useful for are "embarrasingly parallel": you can work on a subproblem without communicating at all with threads / nodes working on other subproblems.
As @Anonymous says, databases are usually not like this. The only thing I can think of is that maybe they're replicating the database onto every client, instead of having them send queries to a central server? If it's small-ish, and read-mostly, that could make sense. (Think like Git vs. SubVersion for revision control: with a distributed VCS like GIT, everyone has their own copy of the repo and can run searches locally instead of putting load on a central server and needing the latency of a round-trip over the Internet.)
Or possibly the database you're talking about is only distributed over nodes in a tightly-coupled cluster
That's already a thing, I think.
There are also cluster filesystems where a whole cluster of machines have disks that make up one huge filesystem, like PVFS, Lustre. That can be called a distributed filesystem, although distributed does often imply over a less tightly controlled cluster. (There are some distributed filesystems that support having some nodes disconnected without stalling everything, though.)
See DWeb, an initiative from Mozilla foundation(?). They have a vision(search engine) for DWeb( for distributed web)such as:
Problems that we commonly encounter in day to day usage: data sharing between devices(phone needs to connect to laptops when not connected to internet- as they mention on their website). Even to help in reading old versions of a web site.
To preempt internet giants usurping web sites contents, and thereby removing from the internet world any such sites (content) that may have succumbed to darwinism.
Actionable intent for this distributed project:
- Stop hate speech
- Support net neutrality
- Stop censorship, governmental intrusion.
To this end, there is the beaker project, a distributed web browser, an experimental browser that enables peer to peer browsing, and distributivity. This project may just be the start of something, as it allows for better person-to-person (read peer to peer) information sharing, and thus enabling distributed computing, as sharing(media, content,etc) is done on on a peer to peer basis.
A file system or database is the underpinning of distribution, and such efforts, only start in that direction. If for instance, peer to peer sharing in an environment that has established rules - this could be enforced by a hypermedia sharing protocol such as Dat. An example of p2p sharing
-media from entity X goes to entity Y regularly, so there is ground for distributed sharing, and shared resource allocation, a distributed browser could enable such distribution.
Data could be stored locally on your computer- just shared by people on the p2p network. For more Beaker’s decentralized browser, sans blockchain!