Designing data- intensive apllications : the big ideas behind reliable, scalable, and maintainable systems