dosco / graphjin

GraphJin - Build NodeJS / GO APIs in 5 minutes not weeks
https://graphjin.com
Apache License 2.0
2.92k stars 179 forks source link

Dynamic configuration for big number of schemas #456

Open inf-initely opened 1 year ago

inf-initely commented 1 year ago

Currently, we host a big number of schemas (about ~700) which are equal in structure and version. The problem is when we try to configure the tables. Even with simpler configuration:

Tables: []core.Table{
    {
        Name:   "news",
        Schema: "99_99_99_9999",
        Columns: []core.Column{
            {
                Name:       "user_id",
                ForeignKey: "99_99_99_9999.users.id",
                Primary:    true,
                Array:      false,
                Type:       "integer",
            },
        },
    },
},

when duplicated to 700, will of course just wasting memory than needed when in actuality, what you really need to change is the schema's name.

Same problem with configuring RoleTable.

What would you like to be added:

New option to load configuration dynamically in runtime. That way, end-user can exchange memory usage with cpu usage.

Or, at least a way to solve problem for end-user with big number of schemas that want to reduce memory usage, if this is not possible.

Why is this needed:

For cases like above, and also when you need to dynamically load or change configuration in runtime.

noobmaster19 commented 2 months ago

Hey! Will this be worked on? I also require a way to load the configurations dynamically as i'm dealing with a multi-tenancy application with different schemas.

dosco commented 2 months ago

You can use it as a library and dynamically provide the config you need when creating a new GraphJin or GraphJinServ instance. You can figure out what schemas are needed based on some other logic and then create a config with just those

noobmaster19 commented 2 months ago

Hey! Thanks for replying :) however, (do correct me if i'm wrong) the nodejs wrapper seems to not allow this because it reads the FS based on the configPath only. I know the configuration can be an object, but not for the other files like data.graphql and the queries folder.