У меня очень похожая структура базы данных (наши таблицы "records" и "recordEntries" отражают ваши "items" и "itemProperties"), и я рассматриваю возможность аналогичной миграции на нереляционную базу данных. Мы, вероятно, пойдем в CouchDB или memcachedb или что-то в этом роде, а не в Google.
Как и вы, у меня нет опыта работы с нереляционными базами данных (как и мои разработчики). Тем не менее, мы бросили пару идей. Наши текущие мысли (используя вашу схему):
- Во-первых: сверните каждый элемент и его свойства в один объект с полями (по сути, документ XML) и поместите его в базу данных, идентифицированную по идентификатору. Каждый раз, когда вы получаете предмет, вы получаете обратно все itemProperties.
Обратите внимание, что у нас есть различие в том, что мы индексируем наш контент вне базы данных (с помощью Solr), и, следовательно, не нужно выполнять поиск в самой базе данных, используя свойство "name", поэтому YMMV.
- Второе: мы составляем список из всех «реляционных» операций, которые мы выполняем, которые не могут поддерживаться вышеприведенной моделью. Это включает в себя несколько «группирующих» операций, в которых мы запрашиваем элементы на основе специального поля в таблице элементов, и запрос, в котором мы пытаемся обнаружить все элементы, которые были недавно изменены (ранее выполненные запросом в столбце даты в таблица предметов). Мы изобретаем альтернативные реализации для каждого из этих случаев (к счастью, их всего несколько).
Если это окажется слишком сложным, мы попробуем то же самое упражнение с другой моделью. К счастью, у нас есть время для планирования.
Одним из ключевых моментов для нас является то, что мы выполняем внешнюю индексацию с помощью Solr, поэтому (например) нам не нужно выполнять поиск в базе данных по значениям в значениях itemProperties или выполнять поиск по имени в таблица предметов.
В любом случае, это, вероятно, не сильно поможет, но я буду стремиться увидеть, какие решения могут предложить более опытные люди.
PS: я предполагаю, что ваша таблица свойств должна содержать миллиарды строк. Сколько именно и на каком оборудовании вы используете сервер MySQL? У вас есть проблемы с масштабируемостью с MySQL?