====Row Based vs Column Based Drivers==== Some data sources have the option of performing either //row based// or //column based// lookups. ===Row Based Drivers=== A row-based driver is designed for the situation where all of your information is stored in a single table, and one column contains an identifier for that information. Each row will have a minimum of.... ^Column Name^Purpose^ |Lookup Column|The name of this measurement channel| |Value|The value of that measurement| |Timestamp //(optional)//|The date and time of the measurement| So for example, in the following example... ^Timestamp^Name^Value^ |12:42|Temperature 1|25.4| |12.42|Temperature 2|13.2| |12.33|Temperature 1|24.4| In this case, the lookup value you assign to each data-binding in ARDI will be the value contained in that 'lookup' column. The **lookup** is 'Name'. So points in ARDI would simply be connected to 'Temperature 1' and 'Temperature 2'. ===Column-Based Drivers=== In column-based drivers, the data source has several columns per row, and the lookup from ARDI is actually the //column name//. They usually have a minimum of.... ^Column Name^Purpose^ |Timestamp|The date and time of the measurement| |Value A|The value of channel A| |Value B|The value of channel B| |Value C|The value of channel C| ^Timestamp^TMP1^TMP2^ |12:42|25.4|13.2| |12.33|24.4|11.5| In this case, the ARDI lookup is the name of the channel. IE. "TMP1" or "TMP2". ===Keyed Column-Based Drivers=== Some select drivers (for instance, our Oracle driver) can support a //key// on a column-based driver. In fact, they may even support **multiple** keys. These work like a hybrid between the two - they are given two lookup values for each data-binding - the //lookup// and the //column//. As an example, take the following... ^Timestamp^VEHICLE^ENGINETMP^OILTMP^ |12:42|1|25.4|13.2| |12:42|2|25.4|13.2| |12.33|1|24.4|11.5| |12:33|2|25.4|13.2| In this case, the lookup for engine temperature on vehicle 1 would be.... |Lookup|1| |Column|ENGINETMP| //History lookups on these drivers can be quite expensive// ===Multi-Keyed Column-Based Drivers=== These are the same as keyed column based drivers, but with the addition of multiple keys. As an example, take the following... ^Timestamp^VEHICLE^OWNER^ENGINETMP^OILTMP^ |12:42|1|1|25.4|13.2| |12:42|2|1|25.4|13.2| |12.33|1|1|24.4|11.5| |12:33|2|2|25.4|13.2| In this case, the lookup for engine temperature on vehicle 2 with owner 1 would be... |Lookup|2,1| |Column|ENGINETMP| This would fetch the //second// record as the active, live data. //History lookups on these drivers can be **extremely** expensive//