2013-02-08 2 views
1

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

Типичный JSON-файл, который должен быть сохранен выглядит примерно так:

[ { "currencyCode" : "INR", 
"receiptNumber" : { "value" : "1E466GDX5X2C" }, 
"retailTransaction" : [ { "grandTotal" : 90000.0, 
     "lineItem" : [ { "otherAttributes" : { }, 
      "sale" : { "description" : "Samsung galaxy S3", 
       "discountAmount" : { "currency" : "INR", 
        "value" : 2500 
        }, 
       "itemSubType" : "SmartPhone", 
       "otherAttributes" : { }, 
       "unitCostPrice" : { "quantity" : 1, 
        "value" : 35000 
        } 
       }, 
      "sequenceNumber" : 1000 
      }, 
      { "customerOrderForPickup" : { "description" : "iPhone5", 
       "discountAmount" : { "currency" : "INR", 
        "value" : 5000 
        }, 
       "itemSubType" : "SmartPhone", 
       "otherAttributes" : { }, 
       "unitCostPrice" : { "quantity" : 1, 
        "value" : 55000 
        } 
       }, 
      "otherAttributes" : { }, 
      "sequenceNumber" : 1000 
      } 
     ], 
     "otherAttributes" : { }, 
     "reason" : "Delivery", 
     "total" : [ { "otherAttributes" : { }, 
      "type" : "TransactionGrossAmount", 
      "value" : 35000 
      } ] 
    }, 
    null 
    ], 
"sequenceNumber" : 125435, 
"vatRegistrationNumber" : "10868758650" 
} ] 

выше JSON является сериализованным сложным объектом, содержащего одиночным или массив объектов других классов в качестве атрибутов. Таким образом, «receiptNumber» является универсальным идентификатором файла JSON.

я должен был бы запросить такие вещи, как количество и значение customerOrderForPickup или GrandTotal сделки, а также в качестве aggegate различных таких транзакций JSONs **

Я хотел бы иметь некоторые предложения относительно того, как : 1) Хранение этих файлов JSON на сервере, файловая система, т.е. 2) Какую базу данных я должен использовать для запроса через эти файлы JSON с такой сложной структурой

Мое исследование привело к тому, что пара возможностей: 1) Используйте базу данных MongoDB для хранения JSON-представителей объекта и запроса через базу данных. Как будут храниться файлы JSON? Каким будет лучший способ хранения транзакций JSON в базе данных MongoDB? 2) Соедините базу данных SQL, содержащую уникальный глобальный идентификатор, идентификатор пользователя и адрес файла JSON на сервере, с агрегирующим кодом в этих файлах. Я сомневаюсь, что это можно масштабировать

Был бы рад, если у кого-нибудь есть какие-либо сведения по проблеме. Благодарю.

+4

Рассматривали ли вы создание массива размерных данных на основе этих исходных данных? Аналитика по JSON в MongoDB разочаровывает. Это похоже на результат системы обработки транзакций. Реляционные/размерные БД очень долго выполняли этот вид работы. –

+0

Это может быть достойным appoach, но тогда, когда свойства (например, мы добавляем больше статистических мер), файл данных продолжает расти, разве вы не думаете, что это создаст проблему? – zenCoder

+2

Миллиарды входа каждый день? Это опечатка? – shahkalpesh

ответ

1

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

Я собираюсь дать мое личное предпочтение, и как бы я это сделать:

Поскольку существует много данных, я бы использовать реляционную базу данных - SQL Server. Поскольку мне нравятся инструменты Microsoft и ASP MVC (я знаю, что есть много людей, которые этого не делают, но это мое предпочтение), и у него есть сериализатор, который может превратить JSON в объекты C#. Так как мне также нравится использовать сущность framework, а сущность framework может переводить объекты C# в материал базы данных, я бы просто структурировал базу данных так же, как и объект JSON. Тогда у меня будет api, который будет принимать те JSON-объекты, ASP MVC автоматически превратит их в объекты C#, а структура сущностей автоматически превратит их в строки базы данных. Таким образом, весь API загрузки будет иметь больше нескольких строк кода.

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

+0

Деннис, будет ли это работать для сложных объектов JSON-представлений, подобных тому, что указано выше? Сериализованный объект JSON (который является файлом, который нужно сохранить) содержит массивы объектов в качестве атрибутов. – zenCoder

+0

Да, я использую его в производстве с объектами такой же сложности, может быть, даже более сложными, где у меня мало уровней глубины с массивами, он работает хорошо. Я не уверен, насколько хороший ASP MVC мог бы работать с такими большими наборами данных (миллиарды файлов :)), так как у меня нет первоклассного опыта с большими наборами данных. –

+0

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

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