Как всегда, это зависит от вариантов использования .. какие запросы вы собираетесь запускать в базе данных?
Некоторые приложения извлекают пользователей только по имени пользователя или uid, для этого ключ хранилище значений идеально и бесконечно масштабируется.
Если у вас есть дополнительные поисковые запросы, вы можете поместить данные в SQL (с индексами в соответствующих столбцах) или использовать внешний поиск полнотекстовый поиск движок (lucene, sphinx).Вы также можете создавать разные индексы для разных реплик, чтобы каждый из них можно было использовать для конкретных запросов, но при этом достигать хорошей производительности вставки (конечно, не для пользовательской таблицы, а для пользовательских данных).
Если у вас сложныйзапросы, объединяющие несколько таблиц, тогда, вероятно, SQL - единственный вариант, но вы все равно сможете масштабировать с помощью sharding для имени пользователя и данных, связанных с пользователем ... это опять же, зависит от того, какие запросы,Для автономных запросов (статистика, отчеты) вы можете выполнять объединения каждого сегмента и объединять результирующие наборы (здесь могут помочь каркасные редукторы, каркасные механизмы).
Наконец, вы можете смешать все эти подходы,используйте ключ-значение для входа в систему, используйте SQL для сложных запросов и используйте репликацию для долговечности и производительности.