Hi! Can someone tell me exactly how Ceramic handles storage of the streams. My understanding so far is that they are stored based on some IPLD in IPFS. Is this accurate? Also if Ceramic is handling all the stream processing, then doesn’t this mean it’s centralized?
Sorry the delayed response!
The persistence model for Ceramic is very similar to that of IPFS. Each Ceramic node determines which Streams it wants to pin data for, and maintains that data locally. But any node on the network can sync the data for any Stream, and then pin it locally, becoming a new provider of that Stream. In that way its possible to have multiple redundant copies of the data for any given Stream, and any node can sync Stream data from any other node that has the data for that stream, in a fully peer-to-peer and decentralized manor.
I hope that helps clarify things, please let us know if there are any follow-up questions!
how does a node decide which streams to pin and which not? say I want to:
- pin only my ONE single stream (my own profile) in my node OR
- pin all streams from any of the entire network?
How do I achieve 1 or 2? Is it done via a config or something?
Every stream is uniquely identifiable by its StreamID. So right now each node decides which stream to pin on a stream-by-stream basis. You need to explicitly pin a stream by StreamID.
With out upcoming release of ComposeDB Beta, however, in ComposeDB all data belongs to a given Model, which determines the schema and semantic meaning of the data (for example you might have a profile Model, a blog post Model, a blog post comment Model, etc). Ceramic nodes can then be configured to index a set of Models, which will cause it to automatically pin all streams created that belong to any of those Models.
is ‘Model’ a ComposeDB-specific concept or is it also an data schema in Ceramic (also a stream)?