Keep the data in a database. Don't load it until it's necessary and if you load then load only the exact portion of the data you really need. If You run some standardized queries, you may try to design views in the backend and/or pre-calculated tables of the data you need most often. Another approach is to build an API service (plumber package) and design specialized endpoints to serve the data you need (filtered, sorted, aggregated etc.) so you don't have to transfer all the dataset. You may also consider using future package that allows you to do things in an asynchronous way.
I don't think you really need all the 6GB of data at once, right? Just keep it untouched until the moment you need a part of it and query only for this certain part. If you want to aggregate your data do it in the backend, don't transfer atomic data from the database to your shiny app.