Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Место, где это перестанет работать, - то, если необходимо сделать то, что называют "обходом черепка" - который узнает все данные через набор различных пользователей. Тот конкретный вид "запроса" должен будет быть сделан программно, спрашивая каждую из баз данных SQLite в свою очередь - и очень вероятно будет самым медленным аспектом Вашего сайта. Это - распространенная проблема в любой системе, где данные были "sharded" в отдельные базы данных.
, Если весь данных является автономным пользователю, то это должно масштабироваться вполне прилично - ключ к созданию этого, эффективный дизайн должен знать, как данные, вероятно, будут используемыми и если данные от одного человека будут взаимодействовать с данными от другого (в Вашем контексте).
Вы, возможно, также должны не упустить ресурсы файловой системы - SQLite является большим, потрясающим, быстро, и т.д. - но Вы действительно извлекаете некоторое кэширование и запись пользы при использовании "стандартной базы данных" (т.е. MySQL, PostgreSQL, и т.д.) из-за того, как они разработаны. В Вашем предложенном дизайне Вы будете пропускать часть этого.
Звуки мне как кошмар обслуживания. Что происходит, когда схема изменяет на всех них DBS?
Одна возможная проблема состоит в том, что наличие одной базы данных для каждого пользователя будет использовать дисковое пространство и RAM очень неэффективно, и когда база пользователей растет, преимущество использования легкого и быстрого механизма базы данных будет потеряно полностью.
возможное решение А этой проблемы состоит в том, чтобы создать" мини-черепки " состоящий из, возможно, 1 024 корпусов баз данных SQLite [до 110] 100 пользователей каждый . Это будет более эффективно, чем дБ на пользовательский подход, потому что данные упаковываются более эффективно. И легче, чем подход сервера базы данных Innodb, потому что мы используем Sqlite.
Параллелизм также будет довольно хорош, но запросы будут менее изящными (shard_id yuckiness). Что Вы думаете?
При создании отдельной базы данных для каждого пользователя она кажется, что Вы не настраиваете отношения... итак, почему использование реляционная база данных вообще?
Я рассматриваю эту ту же архитектуру, как я в основном хотел использовать серверные базы данных SQLLIte в качестве резервного копирования и синхронизирующий копию для клиентов. Моя идея для запросов через все данные состоит в том, чтобы использовать Сфинкса для полнотекстового поиска и выполнять задания Hadoop от плоских дампов всех данных, чтобы Скрайбировать и затем выставить результаты как webservies. Это сообщение дает мне некоторую паузу для мысли однако, таким образом, я надеюсь, что люди продолжат отвечать своим мнением.
Если Ваши данные - это легкое к черепку, почему не только используют стандартный механизм базы данных, и если Вы масштабируетесь достаточно большой, что DB становится узким местом, черепок база данных, с различными пользователями в различных экземплярах? Эффект является тем же, но Вы не используете множество крошечных небольших баз данных.
В действительности, у Вас, вероятно, есть по крайней мере некоторые совместно используемые данные, который не принадлежит никакому отдельному пользователю, и, вероятно, часто необходимо получать доступ к данным больше чем для одного пользователя. Это вызовет проблемы с любой системой, все же.
Наличие одной базы данных на пользователя сделало бы действительно легким восстановить данные отдельных пользователей, конечно, но как сказанный @John, изменения схемы потребует некоторой работы.
Недостаточно, чтобы мешать, но достаточно сделать это нетривиальным.
http://freshmeat.net/projects/sphivedb
SPHiveDB - это сервер для базы данных sqlite. Он использует JSON-RPC через HTTP, чтобы предоставить сетевой интерфейс для использования базы данных SQLite. Он поддерживает объединение нескольких баз данных SQLite в один файл. Он также поддерживает использование нескольких файлов. Он разработан для экстремальной схемы сегментирования - одна база данных SQLite на пользователя.