2015-03-05 1 views
0

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

В настоящее время у нас есть база данных SQL Azure, которая хранит журналы аудита для пользователей для отдельных учетных записей. В настоящее время таблица имеет рекордные данные о 2 миллионах и ее ежедневное увеличение.

Я бы подумал о переходе на MongoBB с одним объектом на учетные записи со всеми вложенными объектами журналов. Данные журналов на одну учетную запись могут увеличиваться сверхурочно, а в настоящее время наибольшие журналы, установленные в учетной записи, составляют около 200 000 журналов, и мы хотели бы, чтобы это было неограниченным.

accountLogs документ

{ 
_accountid: 100, 
Logs: [ 
     { 
      username: 'xyz' 
      action: 'logged in' 
      actionDate: 01/03/2015 
      companyid: 123 
     }, 
     { 
      username: 'xyz' 
      action: 'logged out' 
      actionDate: 01/03/2015 
      companyid: 123 
     } 
     ] 
} 

ответ

0

Как в вашем случае журнале для конкретной учетной записи, не имеющая верхней границы и MongoDB документ, имеющих жесткий лимит 16 Мб на документ, текущее решение не будет работать. Даже если данные достигают более 2-4 МБ, будет сложно запросить, поскольку размер массива будет слишком высоким. Одним из решений, которое вы можете применить, является создание bucker для каждой учетной записи, чтобы схема выглядела так. Теперь вы можете сохранить глобальный счет для идентификатора учетной записи с количеством журналов до сих пор и разделить его с примером размера 10000 ведра, так что это будет так. Вы можете использовать команду upsert mongodb для создания нового ведра на случай, если он не существует.

int bucketId = totallog/bucketsize; 

Теперь у вас есть однородный размер ковша для журнала и сделать составной ключ на счет Ид и ковшом ID для быстрого поиска.

{ 
     _accountid: 100, 
     bucketId : 4, 
    Logs: [ 
    { 
     username: 'xyz' 
     action: 'logged in' 
     actionDate: 01/03/2015 
     companyid: 123 
    }, 
    { 
     username: 'xyz' 
     action: 'logged out' 
     actionDate: 01/03/2015 
     companyid: 123 
    } 
    ] 
} 
+0

Как создать коллекцию журналов с одним документом на журнал, который включает в себя учетную запись, будет ли это иметь какое-либо преимущество в производительности, если я запрашиваю отдельную учетную запись – user1754675