-
Notifications
You must be signed in to change notification settings - Fork 10.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(gatsby): node persistence #31371
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
gatsbot
bot
added
the
status: triage needed
Issue or pull request that need to be triaged and assigned to a reviewer
label
May 11, 2021
vladar
removed
the
status: triage needed
Issue or pull request that need to be triaged and assigned to a reviewer
label
May 11, 2021
…ine executor in CircleCI
This reverts commit cc63a44
* feat(gatsby): add GATSBY_EXPERIMENTAL_STRICT_MODE flag * update snapshot
# Conflicts: # packages/gatsby/src/utils/flags.ts
- replace reducers instead of returning early from the original ones - move isLmdbStore checks to datastore index from the utility fn
vladar
added
the
topic: data
Relates to source-nodes, internal-data-bridge, and node creation
label
Jun 2, 2021
pieh
approved these changes
Jun 2, 2021
This was referenced Jun 2, 2021
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Currently gatsby stores all data in NodeJS heap and persists it between builds using
v8.serialize
. This causes significant memory pressure when there are too many nodes, especially during the persistence step.This PR adds another experimental data storage option: lmdb-store. Instead of keeping nodes in memory, they are instantly saved to this persistent embeddable storage. So there is no need to have a separate persistence step.
It imposes some additional constraints to plugins and gatsby sites, namely:
NODE___featuredImage
after a node was created)Note: this PR only moves
nodes
andnodesByType
to LMDB. The rest of the build state remains in redux cache and persisted as usual.This is the first PR in the series as LMDB unblocks several potential performance improvements. But currently, it may actually cause some memory overhead (average memory usage increases but peak memory spikes decrease, so fewer OOMs) + 10-15% slowdown during sourcing. Eventually, we will cut those down but that's the first step.
Try it
14.10+
GATSBY_EXPERIMENTAL_LMDB_STORE=1
and run gatsby build (or develop) or alternatively, enable it ingatsby-config.js
:yarn add lmdb-store
(since it is an experimental feature,lmdb-store
is not a dependency yet and you must add it to your site explicitly)