使用序列和序列迭代
序列
序列是 SmartEDB 支持的标量数据元素(即 [u]int[1234]、time、date、float 和 double)的无界数组。序列是动态的;它们无需通过字典进行布局放置,并且可以在运行时创建和删除。数据库模式定义序列类型,并可能指定序列是递增还是递减。
应用程序通过其句柄访问序列,其性质类似于 SmartEDB 对象句柄。一个类中的多个序列可以作为一组来处理,这实际上形成了一个时间序列。
考虑以下示例:
class Quote {
char<8> symbol;
sequence<time asc> timestamp;
sequence<float> high;
sequence<float> low;
sequence<float> open;
sequence<float> close;
sequence<uint4> volume;
hash<symbol> by_sym[1000];
};
此示例定义了一个名为 Quote 的类,该类具有一个名为 symbol 的字段,每个此类对象中该字段仅出现一次,并通过名为 by_sym 的哈希索引强制其值唯一。该类包含一个时间序列,由六个序列组成。时间序列应按照时间戳升序处理。
注意:SmartEDB 不会对升序或降序序列中的元素进行排序。升序/降序修饰符会使 SmartEDB 确保数据按正确的顺序插入,若未按此顺序插入则会返回错误,并且会使模式编译器为有序序列生成额外的函数。
关于序列和序列迭代器的注意事项
在使用序列和序列迭代器时,请注意以下几点:
运行时优化:SmartEDB 的运行时不会依赖任何额外的算术软件、精度库或其他第三方库。不过,为了优化处理性能,在某些处理器上,运行时可能会利用向量指令集。
迭代器共享限制:一个序列迭代器不能同时作为多个序列函数的输入,例如用于计算两个移动平均值。但是,您可以创建两个相同的迭代器,并在不同的线程或连接中并行使用它们,以实现类似的功能。
迭代器克隆支持:当从 SQL 使用序列时,可以克隆序列迭代器。对于其他原生语言 API,我们不直接支持迭代器的克隆操作。相反,应用程序可以通过使用“tee”运算符或手动复制迭代器子树来实现类似的效果。
希望这些说明能帮助您更好地理解和使用 SmartEDB 的序列和序列迭代器功能。
使用序列
可以使用 SQL 或原生语言 API 来插入、迭代和更新序列。请使用以下链接查看针对您的开发环境的详细说明和示例:
开发语言 | 说明 |
---|---|
C | 在 C 语言中使用序列 |
C++ | 在 C++ 语言中使用序列 |
Java | 在 Java 语言中使用序列 |
Python | 在 Python 语言中使用序列 |
C# | 在 C# 语言中使用序列 |
SQL | 在 SQL 语言中使用序列 |