разработать систему, поддерживающую массивное место хранения данных и запрос

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

Описание:

В IDC генерируется огромное количество записей, каждая запись состоит из URL, IP, который посещает url, и времени, когда происходит посещение. Запись, вероятно, может быть заявлена как структура, как эта, но я не уверен, какой тип данных я должен выбрать, чтобы представить их:

struct Record {
    url;  //char *
    IP;   //int?
    visit_time;   //time_t or simply a number?
}

Требования:

Создайте систему для хранения 100 миллиардов записей, а также система должна поддерживать 2 вида запросов, по крайней мере:

Сначала, учитывая период времени (t1, t2) и IP, запросите, сколько urls этот IP посетил за данный период.

Во-вторых, если задан период времени (t1, t2) и URL-адрес, запросите, сколько раз этот URL-адрес посещался.

Я оступился, и вот мое глупое решение:

Анализ:

потому что каждый запрос выполняется в данный период времени , так что:

1. Создайте набор , поместите все время посещения в набор и оставьте набор упорядоченным в соответствии со значением времени от старого до последнего.

2.Создайте хэш-таблицу , используя хэш (visit_time) в качестве ключа , эта хэш-таблица называется временной хэш-таблицей, затем каждый узел в определенном сегменте имеет 2 указателя , указывающие на другие 2 хэш-таблицы соответственно

3. Другими 2 хеш-таблицами будут ip-хеш-таблица и url-хеш-таблица .

ip-hash-table использует хэш (ip) в качестве ключа, и все ips в одной ip-hash-таблице имеют одинаковое время посещения;

url-hash-table использует хэш (url) в качестве ключа, и все URL-адреса в одной url-hash-таблице имеют одинаковое время посещения.

Приведите рисунок следующим образом:

time_hastbl
  []
  []
  []-->[visit_time_i]-->[visit_time_j]...[visit_time_p]-->NIL
  []                     |          |
  []               ip_hastbl       url_hastbl
                      []               []
                      :                :
                      []               []
                      []               []

Итак, при выполнении запроса на (t1, t2):

  1. найдите самое близкое совпадение из набора времени, допустим, совпадение (t1 ', t2'), тогда все допустимое время посещения попадет в часть набора, начиная с t1 'до t2';

  2. для каждого времени посещения t в наборе времени [t1 ':t2 '], выполните хеш (t) и найдите ip_hastbl или url_hastbl t, затем подсчитайте и запишите, сколько раз отображается данный ip или url.

Вопросы:

1. Мое решение глупо, надеюсь, вы сможете дать мне другое решение.

2 .В отношении того, как хранить массивные записи на диске, есть совет? Я думал о B-дереве, но как его использовать или применимо ли B-дерево в этой системе?

-121--981126- NameОшибка: неинициализированная константа ActiveRecord:: Associations:: Builder:: XMLMarkup Я нашел пост с заголовком, довольно похожим. Я пытаюсь использовать builder внутри модели. Код выглядит примерно так: требовать '...

Я нашел пост с заголовком, очень похожим на этот, но он не дал мне ответа, который я искал. Я пытаюсь использовать builder внутри модели. Код выглядит примерно так:

require 'builder'

class Document < ActiveRecord::Base
...
  def create_xml
  xml = Builder::XmlMarkup.new( :indent => 2)
  ...
  end
...
end

Когда я пытаюсь выполнить этот код, я получаю следующую ошибку:

NameError: uninitialized constant ActiveRecord::Associations::Builder::XMLMarkup

Но, когда я пробую то же самое в консоли рельсов, все работает просто нормально.
Я что-то упускаю? Любая помощь была бы очень признательна.

12
задан klaffenboeck 6 December 2011 в 01:15
поделиться