В Amazon я работал с большим количеством кода. Большая часть кода, над которым я работал, был кодом, который никто больше не понимал. Это было пронизано особой обработкой случая, которая не была хорошо понята, потому что это было наращивание быстрых исправлений в течение длительного периода времени. Если вы хотели полностью понять эффект изменений, которые вы вносили, вам не повезло. По сути, вы были вынуждены добавить в аккрецию.
Я также работал с большим количеством данных. Структура таблиц в SQL сделала отличную долгосрочную документацию для данных. С базой данных было относительно легко работать напрямую, и структура данных имела смысл. Были люди, которые занимались управлением структурой и целостностью данных.
Я боюсь, что база данных NoSQL, из-за отсутствия хорошо документированной структуры, будет постепенно приобретать все злые качества кода, над которым я работал. В конечном итоге он будет заполнен данными из старых структур, которые никто больше не понимает, и превратится в огромный набор бесполезного мусора.
Я вижу основные преимущества баз данных SQL в виде принудительной документации, необходимой для поддержания структуры базы данных и правил согласованности. Эти преимущества не имеют такой простой краткосрочной меры, как скорость запроса или согласованность транзакций. Это долгосрочные выгоды, которые влияют на полезность ваших данных в течение длительного периода времени.
В качестве второго, связанного с этим вопроса, я считаю более полезным при использовании ORM и тому подобного отобразить мои данные и затем решить, как они будут преобразовываться в объекты в приложении, которое я пишу. Данные и их взаимосвязи представляют собой долгосрочную архивную структуру, которая может использоваться для различных целей.
Структура объектных отношений в приложении существует для целей этого приложения. У заданного набора данных, представленных в таблицах SQL и ограничениях отношений, будет много возможных объектных моделей, которые представляют его в приложении, и каждая из этих объектных моделей будет отражать цели данного конкретного приложения. Но данные и их структура существуют независимо от какого-либо конкретного эфемерного использования, которое может быть из них использовано.
Я вижу аргументы, которые люди приводят в отношении «отчетности», как аргументы в пользу того, что разные приложения могут с пользой просматривать один и тот же набор данных разными способами.
Лично я считаю, что SQL - это хорошая модель для непосредственного использования для архивных данных, редко изменяемых данных или данных с чрезвычайно высокими требованиями согласованности. И я думаю, что я буду продолжать использовать реляционную алгебру для определения общей структуры моих данных, даже если я храню их в базе данных NoSQL. И я не буду изменять структуру данных в базе данных NoSQL без предварительного изменения описывающей их реляционной структуры. Это позволит мне отобразить базы данных NoSQL обратно на SQL, чтобы я все еще мог использовать SQL для долговременного хранения и складирования, и вынудить меня поддерживать структуры данных в хорошо документированной форме.
Подобные действия также помогут мне, когда мне придется извлечь данные из базы данных NoSQL для использования в приложениях, которые не были предусмотрены при создании базы данных.
Конечно, есть некоторые данные, структура которых естественным образом соответствует NoSQL и где генерация реляционной схемы для них была бы бессмысленной. Например, хранение фактических документов, хранение изображений или других носителей, или другие большие объекты данных, которые не имеют структуры, которая может быть полезна для представления. Это различие очень сложно, хотя. Картинки и фильмы действительно имеют структуру, но обычно не имеют структуры, которую нужно хранить в базе данных. Сообщение в блоге также может иметь структуру, если у вас есть система, предназначенная для ее чтения и понимания, и это может быть структура, для которой вы хотите вести запись.