Ответ 1
Раскрытие информации: Я работаю в качестве продукта VP для Neo Technology, спонсора базы данных с открытым исходным кодом Neo4j.
Теперь, когда мы только что выпустили Neo4j 2.0 (на самом деле 2.0.1 сегодня!), мы начинаем выпуск 2.1, который в основном ориентирован (даже больше) на производительность и масштабируемость. Это увеличит верхние пределы графика до эффективно неограниченного числа объектов и улучшит различные другие вещи.
Позвольте мне сначала задать некоторый контекст, а затем ответить на ваш вопрос.
Как вы, вероятно, видели на бумаге, существующая горизонтальная масштабирующая архитектура Neo4j позволяет считывать масштабирование, записывая все, что нужно, чтобы справиться и развернуть. Это дает вам возможность неограниченного масштабирования чтения и в десятки тысяч записей в секунду.
Практически говоря, есть клиенты Neo4j (включая Snap Interactive и Glassdoor) с около миллиарда человек в своем социальном графике... во всех случаях за активным и сильно пострадавшим веб-сайтом, который обрабатывается сравнительно скромным Neo4j кластеров (не более 5 экземпляров). Итак, одна ключевая особенность: Neo4j сегодня невероятная вычислительная плотность, и поэтому мы регулярно видим довольно небольшие кластеры, обрабатывающие существенно большую производственную нагрузку... с очень быстрым временем отклика.
Подробнее о текущей архитектуре можно найти здесь: www.neotechnology.com/neo4j-scales-for-the-enterprise/ Список клиентов (включая такие компании, как Wal-Mart и eBay) можно найти здесь: neotechnology.com/customers/ Один из крупнейших в мире посылок перевозчики-носители используют Neo4j для маршрутизации всех своих пакетов в режиме реального времени с пиками 3000 операций маршрутизации в секунду и нулевым временем простоя. (Это, возможно, самое большое в мире и наиболее критическое использование базы данных графов и базы данных NOSQL, хотя, к сожалению, я не могу сказать, кто это.)
Итак, в некотором смысле, tl; dr состоит в том, что если вы еще не такие большие, как Wal-Mart или eBay, то вы, вероятно, все в порядке. Это немного упрощает его. Существует 1% случаев, когда вы сохраняете транзакционную нагрузку на запись в 100 тыс. В секунду. Однако даже в тех случаях часто не всегда нужно загружать все эти данные в график реального времени. Мы обычно советуем людям делать некоторую агрегацию или фильтрацию и приводить в график только более важные вещи. Интюйт хорошо рассказал об этом. Они фильтруют миллиарды транзакций B2B в гораздо меньшее количество совокупных ежемесячных транзакционных отношений с агрегированными счетами и валютными суммами по направлениям.
Введите осколки... В наши дни Шардинг приобрел большую популярность. Это во многом благодаря другим трем категориям NOSQL, где объединения являются анти-шаблонами. Большинство запросов включают чтение или запись только одного фрагмента дискретных данных. Так же, как присоединение - это анти-шаблон для хранилищ ключей и баз данных, окантовка - это анти-шаблон для баз данных графов. Я имею в виду, что... самая лучшая производительность будет иметь место, когда все ваши данные будут доступны в памяти в одном экземпляре, потому что прыжки назад и вперед по всей сети всякий раз, когда вы читаете и записываете, значительно замедлят ситуацию, если вы действительно не очень умны о том, как вы распространяете свои данные... и даже тогда. Наш подход был двояким:
-
Сделайте как можно больше умных вещей, чтобы поддерживать чрезвычайно высокие объемы чтения и записи, не прибегая к очертаниям. Это дает вам лучшую и прогнозируемую задержку и эффективность. Другими словами: если мы можем быть достаточно хорошими, чтобы поддержать ваши требования без осколков, это всегда будет лучшим подходом. В приведенной выше ссылке описаны некоторые из этих трюков, в том числе шаблон развертывания, который позволяет обманывать ваши данные в памяти, не накладывая их на диск (трюк, который мы называем кэшированием). Есть другие трюки вдоль подобных линий, и больше сходит с щуки...
-
Добавьте вторичный шаблон архитектуры в Neo4j, который поддерживает очертание. Зачем это делать, если лучше избегать осколков? Поскольку все больше людей находят больше возможностей для графиков, а объемы данных продолжают расти, мы думаем, что в конечном итоге это станет важной и неизбежной вещью. Это позволит вам запустить весь Facebook, например, в одном кластере Neo4j (довольно большой)... не только социальную часть графика, с которой мы можем справиться сегодня. Мы уже много работали над этим и создали архитектуру, которая, как мы полагаем, уравновешивает многие соображения. Это многолетнее усилие, и хотя мы могли бы очень легко выпустить версию Neo4j, которая наивно (что, несомненно, будет очень популярно), мы, вероятно, этого не сделаем. Мы хотим сделать это правильно, что равнозначно ракетостроению.