Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.databases.oracle    |    Overblown overpriced overengineered SHIT    |    2,288 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 662 of 2,288    |
|    Frank to Eric    |
|    Re: Will this work?    |
|    10 Nov 03 21:42:08    |
   
   From: fbortel@home.nl   
      
   Eric wrote:   
      
   > I'm trying to insert data for a real-time application that demands   
   > less than 3 second receipt-to-commit time, has a relatively large   
   > (500,000 records/hr) data rate, and requires access times on the order   
   > of 10-15 seconds. We're storing about 24 hours worth of data on a   
   > rolling basis, so I've partitioned the table by hour. Three of the   
   > columns are (separately) indexed.   
   >   
   > I know I can do this by piping data through sqlldr into the live table   
   > as long as partitions are small enough to keep the index modifications   
   > from becoming too taxing. However, I'd like to keep my hardware   
   > requirements to a minimum, since I have about 100 of these streams in   
   > all, and would like to avoid spending $10M on hardware to brute-force   
   > this. So I cooked up a scheme I thought would save on hardware.   
   >   
   > I know if I can direct load data into an offline staging table it's   
   > considerably more efficient, but in that case I won't be able to   
   > satisfy my 3 second receipt-to-commit requirement unless my partitions   
   > are impractically small.   
   >   
   > I plan to have a partitioned, unindexed table to receive data the   
   > "loading" table). Once I get enough data for a full hour, I'll   
   > exchange the partition with an unpartitioned table's data segment (the   
   > "staging" table). Then I'll build the indexes I need for the   
   > destination ("live") table, and exchange the newly indexed table into   
   > a partition in the "live" table.   
   >   
   > The idea here is I can do indexed searches on 23 hours worth of data,   
   > while being able to direct-load my source data without recalculating   
   > indexes. The reason this will work for me is actual _access_ to this   
   > data is relatively uncommon, so I think I would rather deal with a   
   > full table scan on the "loading" table every once in awhile than take   
   > the performance hit from updating indexes every second.   
   >   
   > I plan to create a view to access all three tables at once. I have a   
   > couple of questions, though:   
   >   
   > 1) Can you access a table while you're building indexes? It seems   
   > like I should be able to do non-indexed searches of tables while   
   > they're being indexed. Is that true?   
   >   
   > 2) If I'm selecting from a table, does the select block the partition   
   > exchange? If it doesn't, is the result set determinate?   
   >   
   >   
   > 3) What I really want to know, with all this table indexing and data   
   > segemnt swapping, is what are the chances some of my data is going to   
   > fall through the cracks?   
      
   Apart from the math (500k inserts/hr == 138.8/sec, not 0.3/sec),   
   did you ever read the licence agreement?   
   Real time applications (Nuclear Plants are mentioned!) are not   
   supported...   
      
   Bottom line is, that -unless you're talking near real time- you   
   can never have the data real time with (any?) RDBMS; you'll have   
   to code your own, with known execution paths, leading to known   
   delays.   
   --   
   Regards, Frank van Bortel   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca