Latest Lava SQL for Magma OODB

Hilaire Fernandes hilaire2006 at laposte.net
Mon Apr 2 20:35:51 UTC 2007


Hi, Look's like a great resources of references for indexes use.
Thanks

Hilaire


Brent Pinkney a écrit :
> Hi,
> 
> I have just released the latest version of the Lava SQL engine for 
> Chris's Magma OODB.
> 
> This version is distinguished by being able to optimise some queries to 
> use Magma's indexes instead of materialising each element and checking 
> it in the image.
> 
> You will need an image with:
> 
> 1. Squeak 3.9
> 
> 2. MagmaServerLoader-cmm.25 from Squeaksource
> 
> 3. Lava-brp.36 from Squeaksource
> 
> 4. LavaTesting-brp.34 from Squeaksource
> 
> 5. Open TestRunner and run LavaTestCase and LavaOptimisedTestCase. 88 
> tests should pass.
> 
> This creates a Magma repository of poeple and their vehicles in ~/lava. 
> It may take some time to create the LavaTestResource.
> 
> 6. Open the Transcript and a Workspace.
> 
> 7. Evaluate:
> 
> LavaTestResource current schema explore.
> 
> and explore how lava maps Magma collections in the repository to a 
> relational schema.
> 
> 8. To see the 'raw' Magma collections, evaluate:
> 
> LavaTestResource current vehicles explore.
> 
> LavaTestResource current people explore.
> 
> 9. Use Magma's complex queries to find and print all the Pink* people 
> who are not too old:
> 
> (LavaTestResource current people
> 
> where: [ :p | (p familyName match: 'Pink*') & (p age < 50) ])
> 
> do: [ :p | Transcript show: p fullName; tab; show: p age; tab; show: p 
> vehicle; cr ]
> 
> 10. Evalute this to help see how Lava turns SQL into Smalltalk code:
> 
> LavaTestResource current session preferences
> 
> compileProcessorSilently: false;
> 
> removeProcessorAfterExecution: false;
> 
> tryToOptimiseQueries: true.
> 
> 11. Now try a the same query using Lava instead of Magma:
> 
> (LavaTestResource current session execute: '
> 
> select p.fullName, p.age
> 
> from people p
> 
> where p.familyName like ''Pink%'' and p.age < 50
> 
> ')
> 
> do: [ :row | Transcript show: row fullName; tab; show: row age; tab; cr ]
> 
> 12. Browse class LaProcessorLava. This is the class Lava created to 
> execute the SQL. The #executeSubquery1 method contains the logic.
> 
> Notice how Lava was able to optimise the (p.familyName like 'Pink%') 
> term using a Magma where: clause.
> 
> 12. Try a join to get the people with vehicles:
> 
> (LavaTestResource current session execute: '
> 
> select p.fullName, p.age, v.registration
> 
> from people p, vehicles v
> 
> where p.familyName like ''Pink%'' and p.age < 50 and p.vehicleKey = 
> v.vehicleKey
> 
> ')
> 
> do: [ :row | Transcript show: row fullName; tab; show: row age; tab; 
> show: row registration; cr ]
> 
> 13. Browse LaProcessorLava >> #executeSubquery1 and notice
> 
> 1. how the join is implemented as a nested loop.
> 
> 2. that Lava cannot (yet) optimise a join - the (p.familyName like 
> 'Pink%') term is not longer optimised by Magma.
> 
> 14. To explore the importance of begin able to optimise Lava queries to 
> use Magma's underlying indices, use the LavaLargeTestResource.
> 
> This Lava test case creates a Magma database of electricity reading 
> transactions. The number of transactions stored may be very large:
> 
> Evalute:
> 
> LavaLargeTestResource current createTransactions: 5000. "This may take 
> some time."
> 
> and
> 
> LavaLargeTestResource current session preferences
> 
> compileProcessorSilently: false;
> 
> removeProcessorAfterExecution: false;
> 
> tryToOptimiseQueries: true.
> 
> 15. Now evaluate this query:
> 
> (LavaLargeTestResource current session execute: '
> 
> select * from transactions where deviceId = 222 and agentName = 
> ''midrak'' and reading > 3000
> 
> ')
> 
> do: [ :row | Transcript show: row deviceId; tab; show: row agentName; 
> tab; show: row reading; cr ]
> 
> This should execute in a few seconds.
> 
> 16. Browse LaProcessorLava >> #executeSubquery1 and notice
> 
> 1. how Lava has optimised the (deviceId = 222) and (agentName = 
> ''midrak'') terms
> 
> 2. The unindexed (reading > 3000) term is not optimised.
> 
> 17. Re-evaluate with tryToOptimiseQueries: false.in 13) above and retry 
> the query in 15) above. It will take a lot longer.
> 
> Comments welcomed
> 
> Brent
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Magma mailing list
> Magma at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/magma



More information about the Magma mailing list