While going through ElasticSearch's definitive guide, I stumble upon some mystery. It is first established that search is near real-time, since changes need to be refreshed as a new segment into the filesystem cache (by default every second) only after which it can be seen by the search mechanism, and no fsync is used because it would be too costly.
Then comes along the translog. For some reason, it CAN be used to have real-time CRUD. So the engine first goes through all segments it knows about in the filesystem cache, and adds the changes it finds in the translog. If the translog can be kept up-to-date in realtime, what's the inherent issue in keeping segments up-to-date in realtime? Is it to prevent too many segments in the cache?
Additionally, why can the translog be fsynced every 5 seconds by default with no problems, while segments can't?