In your real-time system are the observation times inhomogenous and the data non-stationary? If you want something simple and fast I suggest using the inhomogenous EMA type operators:
Operators on Inhomogeneous Time Series
They update the EMA ($\text{value}$) with each new observation according to,
\begin{equation}
\text{value} \: += \alpha \:(\text{newData} - \text{value}), \quad \alpha = 1 - \exp{(-\frac{\Delta t}{\tau})}
\end{equation}
with $\tau$ a smoothing/tuning parameter. It is a simple way to estimate an expectation.
Also one can create a simple online median estimate via the update
\begin{align}
\text{sg} &= sgn(\text{newData} - \text{med})\\
\text{med} +&= \epsilon \: (\text{sg} - \text{med})
\end{align}
In practice you want $\epsilon$ small (or decaying with more observations). Ideally $\epsilon$ should depend on how lopsided the updates are becoming; i.e. if $\text{med}$ actually equals the median then $\text{sg}$ should be uniform on $\{-1,1\}$. You can then extend this to a depth $d$ balanced binary tree type structure to get $2^{d+1}-1$ quantiles uniformly spaced.
The combination of the above should give you a decent online distribution of your data. The tree is tricky to get right, I have implementations of both in C++ if you are interested. I use both in practice a lot (financial real-time tick data) and they have worked well.