Экстремальный Sharding: одна база данных SQLite на пользователя

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

33
задан surfmuggle 8 October 2014 в 12:22
поделиться

8 ответов

Место, где это перестанет работать, - то, если необходимо сделать то, что называют "обходом черепка" - который узнает все данные через набор различных пользователей. Тот конкретный вид "запроса" должен будет быть сделан программно, спрашивая каждую из баз данных SQLite в свою очередь - и очень вероятно будет самым медленным аспектом Вашего сайта. Это - распространенная проблема в любой системе, где данные были "sharded" в отдельные базы данных.

, Если весь данных является автономным пользователю, то это должно масштабироваться вполне прилично - ключ к созданию этого, эффективный дизайн должен знать, как данные, вероятно, будут используемыми и если данные от одного человека будут взаимодействовать с данными от другого (в Вашем контексте).

Вы, возможно, также должны не упустить ресурсы файловой системы - SQLite является большим, потрясающим, быстро, и т.д. - но Вы действительно извлекаете некоторое кэширование и запись пользы при использовании "стандартной базы данных" (т.е. MySQL, PostgreSQL, и т.д.) из-за того, как они разработаны. В Вашем предложенном дизайне Вы будете пропускать часть этого.

27
ответ дан 27 November 2019 в 18:28
поделиться

Звуки мне как кошмар обслуживания. Что происходит, когда схема изменяет на всех них DBS?

7
ответ дан 27 November 2019 в 18:28
поделиться

Одна возможная проблема состоит в том, что наличие одной базы данных для каждого пользователя будет использовать дисковое пространство и RAM очень неэффективно, и когда база пользователей растет, преимущество использования легкого и быстрого механизма базы данных будет потеряно полностью.

возможное решение А этой проблемы состоит в том, чтобы создать" мини-черепки " состоящий из, возможно, 1 024 корпусов баз данных SQLite [до 110] 100 пользователей каждый . Это будет более эффективно, чем дБ на пользовательский подход, потому что данные упаковываются более эффективно. И легче, чем подход сервера базы данных Innodb, потому что мы используем Sqlite.

Параллелизм также будет довольно хорош, но запросы будут менее изящными (shard_id yuckiness). Что Вы думаете?

4
ответ дан 27 November 2019 в 18:28
поделиться

При создании отдельной базы данных для каждого пользователя она кажется, что Вы не настраиваете отношения... итак, почему использование реляционная база данных вообще?

3
ответ дан 27 November 2019 в 18:28
поделиться

Я рассматриваю эту ту же архитектуру, как я в основном хотел использовать серверные базы данных SQLLIte в качестве резервного копирования и синхронизирующий копию для клиентов. Моя идея для запросов через все данные состоит в том, чтобы использовать Сфинкса для полнотекстового поиска и выполнять задания Hadoop от плоских дампов всех данных, чтобы Скрайбировать и затем выставить результаты как webservies. Это сообщение дает мне некоторую паузу для мысли однако, таким образом, я надеюсь, что люди продолжат отвечать своим мнением.

2
ответ дан 27 November 2019 в 18:28
поделиться

Если Ваши данные - это легкое к черепку, почему не только используют стандартный механизм базы данных, и если Вы масштабируетесь достаточно большой, что DB становится узким местом, черепок база данных, с различными пользователями в различных экземплярах? Эффект является тем же, но Вы не используете множество крошечных небольших баз данных.

В действительности, у Вас, вероятно, есть по крайней мере некоторые совместно используемые данные, который не принадлежит никакому отдельному пользователю, и, вероятно, часто необходимо получать доступ к данным больше чем для одного пользователя. Это вызовет проблемы с любой системой, все же.

1
ответ дан 27 November 2019 в 18:28
поделиться

Наличие одной базы данных на пользователя сделало бы действительно легким восстановить данные отдельных пользователей, конечно, но как сказанный @John, изменения схемы потребует некоторой работы.

Недостаточно, чтобы мешать, но достаточно сделать это нетривиальным.

1
ответ дан 27 November 2019 в 18:28
поделиться

http://freshmeat.net/projects/sphivedb

SPHiveDB - это сервер для базы данных sqlite. Он использует JSON-RPC через HTTP, чтобы предоставить сетевой интерфейс для использования базы данных SQLite. Он поддерживает объединение нескольких баз данных SQLite в один файл. Он также поддерживает использование нескольких файлов. Он разработан для экстремальной схемы сегментирования - одна база данных SQLite на пользователя.

4
ответ дан 27 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: