2013-12-11 3 views
10

Я разработал JSON representation of a mailbox so that I can look up mails easily, например mailjson[UID].Body.Рекомендации по дизайну JSON

Однако после того, как смотреть на Angularjs и Эмбер, шаблонирования двигатели MVC JS, кажется, что JSON должен быть в формате:

[{ 
    "id": 1, 
    "body": "Blah blah blah..." 
}, 
{ 
    "id": 2, 
    "body": "More blah foo blah" 
}, 
{ 
    "id": 3, 
    "body": "Hopefully you understand this example" 
}] 

И тогда есть некоторая функция FindAll (идентификатор), чтобы захватить пункт на основе по id, который хочет, итерации через JSON. Итак, теперь мне интересно, имеет ли мой дизайн JSON достоинство? Я делаю это неправильно? Почему люди не используют дизайн поиска dict, который я использую с моим JSON?

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

+2

Похоже, вы в основном просите (х) преимущества хэш-таблиц против списков/массивов. Все зависит от того, что вы в основном делаете с вашими данными. –

+0

Я делаю это для создания почтовых архивов https://github.com/kaihendry/imap2json – hendry

+3

Это неправильный ответ :-) То, что он имеет в виду, зависит от того, с чем вы это делаете, а не с тем, как вы его храните. Какой алгоритм вы используете для * обработки * данных. Если вы знаете, что собираетесь получить доступ к n-му элементу в контейнере для хранения, перейдите для массивов, если вы знаете, что у вас будет какой-то строковый ключ, чтобы найти часть информации внутри большого контейнера для хранения для хэшей. Один - это упорядоченное (пронумерованное) хранилище, другое - неупорядоченное. Если вы собираетесь получать свои электронные письма по идентификатору, и нет (больших) пробелов в идентификационной нумерации, массивы лучше. –

ответ

6

Лучшей практикой хранения большой таблицы в JSON является использование массива.

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

Структура того, как вы храните данные в памяти, не обязательно должна быть (и не должна быть) такой же, как структура хранилища на диске, потому что нет возможности сериализовать/десериализовать внутреннюю структуру карты JavaScript. Если бы это было возможно, вы бы сериализовали и хранили индексы так же, как MS SQL Server хранит таблицы и индексы.

Но если структура, которую вы используете, заставляет вас иметь такую ​​же структуру в памяти и на диске, то я поддерживаю ваш выбор использования id как ключа в одном большом объекте, потому что тогда легче передавать идентификатор в запросах JSON на сервер и с сервера делать какие-либо действия с помощью элемента электронной почты или обновлять его состояние в пользовательском интерфейсе, предполагая, что на сервере и в браузере сохраняется значительный список элементов электронной почты в памяти.

Смежные вопросы