Skip to Content »

online discount medstore
advair diskus for sale
buy advair diskus without prescription
allegra for sale
buy allegra without prescription
aristocort for sale
buy aristocort without prescription
astelin for sale
buy astelin without prescription
atarax for sale
buy atarax without prescription
benadryl for sale
buy benadryl without prescription
buy clarinex without prescription
clarinex for sale
buy claritin without prescription
claritin for sale
buy flonase without prescription
flonase for sale
buy ventolin without prescription
ventolin for sale
amoxil for sale
buy amoxil without prescription
augmentin for sale
buy augmentin without prescription
bactrim for sale
buy bactrim without prescription
biaxin for sale
buy biaxin without prescription
buy cipro without prescription
cipro for sale
buy cleocin without prescription
cleocin for sale
buy dexone without prescription
dexone for sale
buy flagyl without prescription
flagyl for sale
buy levaquin without prescription
levaquin for sale
buy omnicef without prescription
omnicef for sale
amaryl for sale
buy amaryl without prescription
buy cozaar without prescription
cozaar for sale
buy diabecon without prescription
diabecon for sale
buy glucophage without prescription
glucophage for sale
buy glucotrol without prescription
glucotrol for sale
buy glucovance without prescription
glucovance for sale
buy micronase without prescription
micronase for sale
buy prandin without prescription
prandin for sale
buy precose without prescription
precose for sale
buy cialis professional without prescription
cialis professional for sale
buy cialis soft without prescription
cialis soft for sale
buy cialis super active without prescription
cialis super active for sale
buy cialis without prescription
cialis for sale
buy levitra without prescription
levitra for sale
buy viagra professional without prescription
viagra professional for sale
buy viagra soft without prescription
viagra soft for sale
buy viagra super active without prescription
viagra super active for sale
buy viagra super force without prescription
viagra super force for sale
buy viagra without prescription
viagra for sale
buy celebrex without prescription
celebrex for sale
buy colcrys without prescription
colcrys for sale
buy feldene without prescription
feldene for sale
buy imitrex without prescription
imitrex for sale
buy inderal without prescription
inderal for sale
buy indocin without prescription
indocin for sale
buy naprosyn without prescription
naprosyn for sale
buy pletal without prescription
pletal for sale
buy robaxin without prescription
robaxin for sale
buy voltaren without prescription
voltaren for sale

Tech Life of Recht » archive for 'openuddi'

 Searching for a better data structure

  • March 25th, 2008
  • 1:01 am

The OpenUDDI server poses an interesting challenge when loaded with large amounts of data. The problem is actually pretty generic:
Given a number of objects where each of the objects have a set of (key, value) tuples associated, find the objects which have specific tuples associated. Preferably in SQL, where the tables could look like this:
[code]
OBJECTS
——
| Id |
—–
| 1 |
| 2 |
| 3 |

VALUES
———————–
| ObjId | Key | Value |
———————–
| 1 | a | val1 |
| 1 | b | val2 |
| 2 | a | val1 |
| 3 | c | val1 |
[/code]

This is just a simple example. In the OpenUDDI server, we’re working with about 100.000 entities in the Objects table (Business Entities) and 1,8 million key/value pairs, distributes pretty evenly out on the 100k objects. One of the interesting features is that some of the pairs appear in almost all objects while other pairs are close to unique.

When searching for pairs (a, val1) and (b, val2), SQL queries look something like this:
[code]
SELECT o.* FROM objects o, values v1, values v2 WHERE o.id = v1.objid AND o.id = v2.objid AND (v1.key = ‘a’ AND v1.value = ‘val1’) AND (v2.key = ‘b’ AND v2.value = ‘val2’)
[/code]

In other words, a dynamic SQL statement based on the number of pairs in the query. Most databases cannot process this type of query effectively for two reasons:

  • Statements cannot be reused, and complexity goes up as the number of pairs increase
  • Index utilization is hard because some pairs occur many times while other pairs are almost unique. Only few database engines always use the unique pairs as the primary filter key, regardless of the order in the query

The question then is how to make this run fast. With OpenUDDI, this type of query can run in just under 1 second on PostgreSQL 8.3. All access is index based, but it’s still pretty slow, given that we would like to handle many requests per second.

It would be nice, of course, to be able to say that we’ve solved the problem, but unfortunately this is not so. For now, we’ve settled on a heuristics based optimization: We count all pairs and store the counts in memory. When a new query comes in, we find the pair with the lowest count and use only that pair in the SQL statement. This will speed the select statement up considerably, the only catch is that we now have to post-process the result in memory in order to filter out any entities which does not match the rest of the pairs.
The remaining pairs could probably be pushed into SQL too by using a subselect, but for now this solution works.

My only problem with this solution is that it seems as if there ought to be a better way. However, I can’t think of any, and neither can anybody I’ve talked to about it.

 New OpenUDDI project site

  • March 10th, 2008
  • 7:28 pm

We’ve just released the new OpenUDDI project site at SourceForge. This will be the new primary project site for OpenUDDI instead of the old site at Softwarebørsen, which was in Danish only. In a short while, we will make our SVN repository public too, but until then, we’ve uploaded the newest release together with the sources.
If you’re interested in OpenUDDI in any way, I encourage you to join the mailing list. We would very much like to hear from anybody using OpenUDDI.