RE: Efficiently convert this SQL statement to ActiveRecord l

PS: I realize this can be done with a loop. But it will be VERY slow
right?

Brian C.
Operations Manager

MGAM Systems, Inc.
1 Broadway Place
Schenectady, NY 12305
<Yahoo Search - Web Search
enectady%2C+NY+12305&country=us>

[email protected] mailto:[email protected]

tel:
fax:
mobile:

518-881-1121
518-881-1128
518-727-6652


From: [email protected]
[mailto:[email protected]] On Behalf Of Brian C.
Sent: Tuesday, March 28, 2006 4:38 PM
To: [email protected]
Subject: [Rails] Efficiently convert this SQL statement to ActiveRecord
loop

Hey Folks,

My app compares the last known set of files located on a series of
servers against a current snapshot for auditing purposes. Its working
really well, and I’ll open source it when its complete!

Here’s my current issue (and forgive me, I started life as a DBA and I
constantly want to revert to connection.execute.)

The tables to store my objects are organized in this way:

COMPUTER ← belongs_to / has_many => CONFIGRATIONS <= has_many /
belongs_to → ITEMS

I have another table called SNAPSHOT that has:

table.column :computername, :string

table.column :dirname, :string

table.column :filename, :string

table.column :file_modified, :datetime

Issues:

  • CONFIGURATIONS and SNAPSHOT both have about 500 millions rows

The goal:

  • Add configurations based on the the snapshot that do not
    currently exists
  • Delete configurations that do not exists in the current snapshot
  • Update configuration that have a file_modified data newer than
    the one stored in the CONIGURATION object.
  • Observe all changes and log to an AUDIT table

This is pretty easy in SQL, but hard in a non set based language… Can
anyone point me in the right direction?

Can anyone point me in the right direction?

Best,

Brian

Brian C.
Operations Manager

MGAM Systems, Inc.
1 Broadway Place
Schenectady, NY 12305
<Yahoo Search - Web Search
enectady%2C+NY+12305&country=us>

[email protected] mailto:[email protected]

tel:
fax:
mobile:

518-881-1121
518-881-1128
518-727-6652