For the record, we never suggested massive parallel system
at the base:
- we think we will get away with just one ingest server
(well two because of mirroring for fault tolerance)
- we are planning to serve Object Catalog from several
servers (naturally no one would want to dump 50TB of data
on a single server =).
Jacek
Maria A. Nieto-Santisteban wrote:
Hi,
my 2 cents
I don't think the base will need a massive parallel system (DB speaking)
In essence because there is only one task that needs to be done per FOV at
a given time:
Matching what was just detected against what we knew from prior visits
(from earlier this night or other nights).
The amount of points that we need to match per FOV is very small, order of
10e5 x 6 10e6 in the worst case (The Galactic Plane). It is not big deal
to dinamically build zones for a (10 deg^2) FOV and do the spatial match.
There is nothing to be scared of about doing the spatial match inside the
DBMS. The trick is to have the data organized/partitioned in such a way
that we can quickly prepare what we know about the FOV we are about to
process and build a "mini database" in real time for that area of the sky.
The DBMS will put everything in memory if that is possibel. If not, the
DBMS will know better than us how to move data from disk to memory.
The key is being smart about how to partition the data and how to manage
the partitions. In summary, how do we know what partitions contain what we
need? Jacek is mentioning ~13 k partitions for the Object table. You need
to add the partitions involved in breaking down the (DIA)Source table.
Anyway, from my point of view, the cross-match is not an issue at the
base, the actual issues/questions are:
First, figuring out what are the attributes from the Object and Source
tables that will be required to decide whether or not is necessary to
trigger an alert and how complex are these queries.
Second, If I am observing the same piece of the sky for a second time
during the same night what do I need to know about what happened in the
prior visit?
The answer to those two questions will determine what needs to be
inserted and updated in real or near real time at the base.
We are talking a lot about having the indexes in memory, building our
own indexes, and solving the problems in memory ... those are good
thoughts. However, the indexes are not the actual data and sooner or
later you will have to go to get the data out of disk.
Talk to you tomorrow
Cheers
Maria
On Wed, 1 Nov 2006,
Becla, Jacek wrote:
Keywords: DataAccWG
Hi Serge,
I'm moving this discussion to the mailing list, yes, it is interesting enough.
This might work, however, I worry that it solves only the cross match problem. I am hoping that the solution to "the other problem" will automatically solve the cross-match problem (at no extra cost).
This "other" problem is updating ~100K objects per visit. In practice we will be updating only part of the object: most values for a given band, so ~1/6 of all attributes, or ~300 bytes, but that is still too much to simply assume that we will be able to keep that in memory.
Thanks,
Jacek
P.s. Why are you saying we have 5 min preparation time? I thought Tim mentioned
we would have information about next observing field ~30 sec in advance.
-----Original Message-----
From: Serge Monkewitz [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 01, 2006 5:53 PM
To: [EMAIL PROTECTED]; Becla, Jacek;
[EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: An idea for the object catalog cross-match
Hi all,
I wasn't sure if this was of enough interest to post to
the LSST-DM list, but let me know if I should post it there.
I've been thinking about cross-matching against the
object catalog problem, specifically in the context of the
base camp and I have fairly simple idea that I think could
work. The idea runs counter to the current "everything must
be massively parallel" line of thinking: what about storing a
compressed structure that represents the *entire* object
catalog (in a fashion similar to the WAX band/lane and
Maria's zone/ra approach) in the memory of a single machine?
This attempts to address the following
issues:
- For a particular visit, we have a minimum of 5 min. preparation time
- [using zone approach] If I have understood correctly, zone
tables have to be created/indexed or brought into memory
during this time. If they aren't created dynamically, then
one must deal with various issues: the zone table(s) might
have to be updated along with the object catalog,
partitioning zone table(s) is complicated by the fact that a
single object may belong to more than 1 zone table or zone
table partition.
- [using WAX approach] The equivalent of the zone table has
to be read and created from the DBMS (basically it's the
"create zone tables dynamically"
approach with custom code for index creation and x-match).
Instead, consider the bare minimum we need to do a distance
based match - for objects and DIA sources: ID, ra, dec.
Additionally, an object type might be useful.
First of all, quantize ra, dec into 32 bit integers (e.g.
write ra = 360*x degrees, store x as a 32 bit fraction: 0 <=
x <= (2^32 - 1)/2^32 and dec = 180*y degrees, y is a 32 bit
fraction 0 <= y <= (2^32 - 1)/2^32). This means we are
storing ra as multiples of ~0.0003 arc seconds, and dec as
multiples of ~0.00015 arc seconds. Finally, let the id be
some 64bit integer and reserve a small number of bits for the
object type (maybe just a single bit that says whether or not
the object is variable?).
If we were to stop there, storing 20 billion objects at 16
bytes per object would take ~320GB, which one might expect to
be within the memory capacity of a single machine by 2012 (I
can buy a 2 socket machine with 64GB of RAM today). However,
it's quite easy to further reduce the memory
requirements:
- bin objects into (for example) 64k bands/zones. This means
the band/zone an object is in automatically gives you the
upper 16bits of that objects dec value.
- within a band/zone, store objects in ascending ra order.
Exploit this ordering to save space via delta-coding.
- Instead of storing some arbitrary id for an object,
stipulate that the first 40bits of the id are given by some
combination of the upper ~20 most significant bits of ra and
dec. The remaining ~24bits are dedicated towards guaranteeing
uniqueness of the ID.
[Note: I expect data structure overhead to be quite small
compared to the object data, for the moment I am just ignoring it]
So basically it seems quite feasible with only a very
lightweight compression scheme to store the necessary
information from the object catalog using roughly 8 bytes per
object, or ~160GB of memory. Of course, fancier compression
techniques could be applied on top of or instead of the above.
Some further questions then arise:
1. How is this in-memory structure updated?
-------------------------------------------
It is never updated. We are not allowed to update IDs
anyway, and even if an object position is updated downstream,
I am assuming that the new position will never differ much
from the original one. The positions of the in-memory object
representations are therefore somewhat fuzzy and this must be
accounted for by increasing the search radius for finding matches.
2. What about new objects?
--------------------------
These must of course be inserted into the structure (and
such insertions must be logged to disk). Given the simple
indexing and compression scheme as well as the fact that the
number of inserts will in the common case be very small, this
doesn't seem to be a problem. In fact, we can use the
in-memory object index to generate the new object IDs:
since the IDs correlate to position extremely well, we just
have to do a cross match of the objects to insert against the
existing ones with appropriate search radius to make sure we
don't assign an ID already in use. Doing such a cross match
also naturally tells us where in the structure the new
objects must be inserted.
3. OK, but this is a (rough) distance match only - what next?
-------------------------------------------------------------
The (DIA Source ID, object ID) match pairs are sent to
the RDBMS. A 2-way join of the input DIA Source Collection
with the full object
table(s) then gives you the details necessary for further
decision making.
Hopefully the number of such pairs will be relatively small
(when compared to the total number of objects in the visited
region), otherwise the approach falls down. The speed of this
join determines the viability of the approach.
It seems to me this has the following pros:
- should drastically reduce database reads
- because everything stays in memory at all times, no advance
knowledge of the observation schedule is needed (at least not
for this step)
- the object catalog at the base camp needs just a single
B-tree index (on
ID)
- updates of the spatial index are eliminated
- inserts are not complicated by having to distribute parts
of the spatial index across machines
- cross-match performance for a single visit will likely be
extremely fast (consider that even a single machine will
likely have 2 or 4 sockets with each socket having 4 or more
cores) despite having to decompress data and compute (x,y,z)
for each object position.
and cons:
- memory is expensive
- for fault tolerance, we need at least 2 machines with
enough memory to support this approach, and they really
cannot be used for anything else
- what if the fuzzy positions inflate the number of matches
by a lot (especially early in the survey)?
- not clear that this is useful for the archive center
So what do you all think? Am I barking up a tree?
Serge
_______________________________________________
LSST-data mailing list
[email protected]
http://www.lsstmail.org/mailman/listinfo/lsst-data
_______________________________________________
LSST-data mailing list
[email protected]
http://www.lsstmail.org/mailman/listinfo/lsst-data