Каковы преимущества хранения вашей схемы в виде массивов или хеш-полей?
Это относится к переосмыслению БД. Лучше ли иметь схему со встроенными массивами или хэш-полями в качестве массивов? Сохраняя свои намерения простыми... Я пытаюсь отслеживать ежедневную статистику. Но я между делом решаю, какая структура схемы лучше. Позвольте мне уточнить..
Схема чистого массива:
schema = [
{
title: 'foobar',
dates: [
{
date: 20130926,
views_count: 10,
click_count: 10
},
{
date: 20130927,
views_count: 20,
click_count: 20
},
{
date: 20130928,
views_count: 30,
click_count: 30
}
]
}
]
Схема массива хеш-полей:
schema = [
{
title: 'foobar',
dates: [
'20130926' => {
views_count: 10,
click_count: 10
},
'20130927' => {
views_count: 20,
click_count: 20
},
'20130928' => {
views_count: 30,
click_count: 30
}
]
}
]
Я могу думать о том, что с последними легче предотвратить двойственность дат. Есть ли другие преимущества? Или есть общее соглашение, которое предпочитают разработчики?
1 ответ
ИМХО, ваше приложение превосходит любую СУБД. Вместо того чтобы сосредоточиться на выборе хранилища БД, сфокусируйтесь на потребностях своего приложения, программировании и производительности. Сохраняйте данные своей программы, затем итеративно оценивайте и оптимизируйте для доминирующих случаев с изменениями схемы только при необходимости. Ваша заявка ответит на ваши вопросы хранения. Например, в общем:
(1) если вам нужен преимущественно упорядоченный доступ к датам, тогда используйте array (2), если вам нужен быстрый произвольный доступ ко многим датам, тогда используйте хеш
И язык программирования и семантика СУБД имеют значение. Даже если в БД есть упорядоченные хэши, ваш язык может потерять это, например, хэши в Ruby 1.9 и более новые упорядочены, но ранее не были упорядочены.
Конечно, ваш выбор схемы ОЧЕНЬ важен. Но, IMHO, основной сильной стороной СУБД, относящихся к документам (не столбчатым объектным данным NoSQL), является способность сопоставлять естественные структуры данных в языках программирования. Поэтому я мягко призываю вас вернуться к вашей заявке / программе в качестве фокуса как для вопросов, так и для ответов.