Skip to content

SNOW-2297278: Make the JDBC Driver a Reasonable Size (Current Size 78.3MB (307.7MB uncompressed)) #2320

Description

@luketn

What is the current behavior?

The driver is a ridiculous size:

snowflake-jdbc-3.26.0.jar
-> 78.3MB (307.7MB uncompressed)

This is up from 3.9.2:
snowflake-jdbc-3.9.2.jar
-> 29.2MB

This is up from 3.88:
snowflake-jdbc-3.8.8.jar
-> 21.4MB

21.4MB was already a ludicrous size for a dependency, and at 78.3MB is by far the largest dependency in my app.

When you dig into the detail of what is in there, you can see that there are several large libraries shaded in:
Image

This includes, for example, Windows, Linux, MacOS binary compiled drivers in the META-INF directory, regardless of the target we may be building for.

What is the desired behavior?

Either:
a) reduce the driver size wholesale
or
b) break it up into modular dependencies that can be independently imported to include only the required features and target platforms e.g. provide an alternative flavour per platform with only the required code

Ideally, we would have a pure-Java implementation of a Snowflake client which would compress down to a small JAR dependency of 1 or 2 MB.

For example the MongoDB driver is around this size:
Image
(admittedly it also depends on Netty, but this is a small pure-Java network library)

How would this improve snowflake-jdbc?

It would make it more credible and reasonable as a dependency, as well as improve its reputation and show that the team care about their community and the discipline of maintaining good clean code.
It would radically reduce the surface area for bugs.
It would reduce the surface area for security flaws.
It would (almost certainly) improve performance.

References, Other Background

Metadata

Metadata

Labels

duplicatequestionIssue is a usage/other question rather than a bugstatus-triage_doneInitial triage done, will be further handled by the driver team

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions