At first, I was like, WoW, What A Wonderful Idea, then I head off to my computer and start putting the 2 designs together into 1 working Hard Drive. Unlike them, I was able to use the brand new technologies and blocks such as observers and slime block to my advantage, keep in mind I am making this in 1.12.2 but since no major Redstone change have come since I do expect they work in 1.13 and 1.14. And with the inspiration and my amateur Redstone Skills, I ended up with this increasing slow, but compact and easy to understand hard drive, as shown in the pictures.
The Specifications I ended up via my couple hours are scrambling to find a way to fit everything is a tileable 2x12x2 vertical bit, which is super slow for the byte farther away from the input due to all the repeater they go through to fit all of them in, although the speed is proportional to the distance to the input as well as output, the bit itself, when directly hooked to the input and output, without going through all other bits that come before it, ended up with a near instant response time, as no repeater nor torch was used in the bit itself, and mostly relied on BUD powered piston pushing Redstone block attached with a slime block to store and retrieve memory.
I am more than sure I can achieve even better speeds with a little tweaking and creating a more sophisticated writing and reading system, at the cost of an increase in height, and the way I select data to be retrieved is unconventional, making the need for a controller to be attached to the end of the output select bus, which adds a 2 tick delay when switching and selecting data, but the main aim of this random project is to make the smallest possible memory drive, excluding and controllers that may need to be attached, and have it working at decent speeds
So here I am asking how can I make, most importantly, the drive smaller and less importantly faster?
Look up how modern ram is read and written from in hardware. The most important factor is scaling. You wouldn't want to make a massive single tier decoder for addressing 1 or 2 bytes. And if space is a concern, try to look into signal strength (hexadecimal).
As a side point, I hope you know things like rewritable program memory and pointer usage to actually utilise things like big long term storage.