Говорете с таблици в стил хранилище на данни с ActiveRecord?

Докато моето приложение Rails узрява, става все по-очевидно, че има силен вкус на хранилище за данни, липсва му само таблица с факти, за да бъде всичко ясно.

Освен това току-що прочетох глави 2 (Проектиране на красиви API) и 3 (Овладяване на динамичния инструментариум) от Най-добри практики за Ruby.

Сега се опитвам да разбера как най-добре да проектирам частта за извличане на факти...

Да кажем, че имам следните размери (съществуващи модели в приложението):

  • Продукт (съдържа средства)
  • фонд
  • Измерване (напр. общо съхранение, средно съхранение, средна експозиция)

... и един добър стар факт с общо предназначение:

  • Факт (дата, стойност плюс NULLable колона с външен ключ за всяко от моите измерения)

Някои аспекти, за които ще съм благодарен да получа съвет:

  • Какво може да представлява гъвкав интерфейс за извличане?
  • Какво се случва, ако имам Facts както с NULL (т.е. всички или не ме интересуват), така и с NOT NULL (конкретни) стойности за измерение? Псевдо-стойност като :all? Или трябва да се прилага някаква конвенция?
  • Как да избера само подмножество от стойности на измерение? Или да изключите подмножество? :само и :изключи?
  • Някой имал ли е опит със създаването на named_scopes, за да се справи с това? Има очевидното привличане да можем да свържем по едно за всяко измерение, което ни интересува, но става ли твърде тромаво, ако стигнем до 7 или 8 измерения?

(Знам, че се смята, че плъгин acts_as_fact съществува под някаква форма (поне имаше малък шум на RailsConf 2006), но не можах да намеря никакъв код или описание как може да е работил.)

Версии: Rails, ActiveRecord 2.1.2, Oracle Enhanced Adapter 1.2.0

РЕДАКТИРАНЕ: Разгледах ActiveWarehouse и имам някои резерви: - основният клон не е имал ангажимент от 8 ноември насам и изобщо няма активност от 9 януари насам; - урокът датира от 2006 г., признава се за остарял и 404s за мен; - изглежда, че иска да избяга от ActiveRecord - голяма част от приложението ми ще остане в AR и мисля, че в момента искам решение за AR.

Така че ще се пазя от това, благодаря!


person Mike Woodhouse    schedule 03.08.2009    source източник


Отговори (4)


Какво се случва, ако имам Facts както с NULL (т.е. всички или не ме интересуват), така и с NOT NULL (конкретни) стойности за измерение? Псевдо-стойност като :all? Или трябва да се прилага някаква конвенция?

NULL би било подвеждаща оферта, защото означава липса на асоциация. Бих използвал стойност като -1 (ако е цяло число Foreign_key само със стойности > 0).

Как да избера само подмножество от стойности на измерение? Или да изключите подмножество?

with_scope()

можете също да презапишете функцията за намиране

   def self.find(*args)
    if  anything
      with_scope(a_scope) do
         result = super *args
      end
    else
      result = super *args
    end
   end

   def self.a_scope
    {:find => { :conditions => ["person_id  = ?", me] , :readonly => true}}
   end

Някой имал ли е опит със създаването на named_scopes, за да се справи с това? Има очевидното привличане да можем да свържем по едно за всяко измерение, което ни интересува, но става ли твърде тромаво, ако стигнем до 7 или 8 измерения?

Имаме olap база данни с 4 измерения и работи добре. Мисля, че ако приложите някои персонализирани методи за active_record, ще се забавлявате с приложението си.

Намерих и това: http://github.com/aeden/activewarehouse/tree/master

person Beffa    schedule 03.08.2009

има още един, който не съм използвал, но изглежда добре:

http://github.com/wvanbergen/active_olap/tree/master

http://techblog.floorplanner.com/2008/07/29/active-olap-released/


и това за SOLR, което намерих в Google

http://code.google.com/p/kettle-solr-plugin/

person Gene T    schedule 04.08.2009
comment
Ооо, още връзки. Показва моята новост в DW (предишни DW приложения работеха = 1), че не съм се сетил за тези думи за търсене. Благодаря! - person Mike Woodhouse; 04.08.2009

Обмислях да използвам ActiveWarehouse преди известно време, преди да се насоча към други неща, така че не мога да ви кажа колко добре работи, но е нещо, което да добавите към списъка си, за да проверите. Има генератори за факти, измерения и кубове, както и ETL инструментариум.

person Luke Francl    schedule 04.08.2009

Така че имаме редица скъпоценни камъни или плъгини с различна степен на сложност, нито един от които изглежда не е много активно в процес на разработка (или има нещо, което се случва, но е под радара).

Във всеки случай не искам да изграждам склад за данни, а просто да внедря една или две таблици с факти в стил звездна схема. Това, което исках, бяха идеи за достъп до такава маса.

Склонен съм към отпадане на идеята за множество нива, където агрегат в измерение ще има NULL във външния ключ за това измерение. Въпреки че ще намали броя на редовете, включени в заявка, ползата ще бъде малка и не е безплатна: ще имам по-голяма таблица с факти и по-сложен код.

Извличането изглежда, че след това може да бъде обработено с набор от named_scopes, по един за всяко измерение, за филтриране. Или персонализиран търсач, захранван с подходящо конструиран хеш, може да е по-добър.

Когато го създам, ще се върна с малко по-добра информация...

person Mike Woodhouse    schedule 29.09.2009