Hi rara,
Your knowledge is correct. Where both SPDS and SPDE allow for multi-threaded data access, SPDS employs the same concept in a far more advanced way. SPDS is a licensed product. Some would consider SPDE a "poor man's" SPDS.SPDS adds DBMS capabilities like partitioning based on varriable values, access control, locking, query optimization, backup&recovery etc. If tuned and indexed properly SPDS can deliver amazing query performance combined with solid loading speeds.
SPDS was originally engineered to overcome the 2G filesize limit that many old operating systems had, back in the Version 6 days. Although that is now behind us the concept of partitioning data is still valid for performance reasons. Many applications can benefit by the mere specification of the SPDE engine to the libname statement (whilst observing the gotchas and usage notes).
Hope this helps.
More details from @PatrickCuba:
SPDE is licensed with Base SAS. It partitions a dataset into mini-datasets that sit on individual spindles of disk. When you query the dataset you still query one table but underneath the table has been split as just described. Data and indexes can be split into different physical partitions as well.
SPDS is SPDE but as a separate server with many more features catered to treating the data like a separate server complete with ACL and command line interface. Various SAS procedures have SPDS-specific options to it.
Example: PROC APPEND has a UNIQUESAVE=REP option, which is quite brilliant - you update data in the Base table by the same key and add new records that do not yet exist.
Another thing to remember is that the SQL Optimizer bahaves differently too, In SPDS you can do things like Star Join Optimization. This reduces the number of steps required to complete a query on very big tables.
Also a cool thing to try on SPDS is clustering through PROD SPDO. This allows one to create a super dataset with a "Spine" column to select which subset (spde) dataset you want to reference. This column is called MINMAXVARLIST. A great example is splitting the subsets of the cluster by Month-Year so when you run a query by selecting a particular minmaxvar value the SQL optimizer will know which subset to query.
I've provided quite a few keywords here you can research on yourself
... View more