我想声明一个返回指向同一类型函数的指针的函数.
我想用它来实现如下所示的状态机:
typedef event_handler_t (*event_handler_t)(event_t*); // compilation error
event_handler_t state2(event_t* e);
event_handler_t state1(event_t* e) {
switch(e->type) {
//...
case SOME_EVENT:
return state2;
//...
}
}
event_handler_t state2(event_t* e) {
switch(e->type) {
//...
case OTHER_EVENT:
return state1;
//...
}
}
//...
event_handler_t event_handler;
//...
event_handler(&e);
//...
Run Code Online (Sandbox Code Playgroud)
我设法使用如下结构解决compliation错误:
typedef struct event_handler {
struct event_handler (*func)(event_t *);
} event_handler_t;
Run Code Online (Sandbox Code Playgroud)
但这会使返回声明更加复杂:
event_handler_t state2(event_t* e) {
{
event_handler_t next_handler = {NULL};
switch(e->type) {
//...
case OTHER_EVENT:
next_handler.func = state1;
break;
//...
}
return next_handler;
} …Run Code Online (Sandbox Code Playgroud) 您能否分享一下您如何在Cassandra中实现数据版本控制的想法?
假设我需要在简单的地址簿中对记录进行版本控制.(地址簿记录存储为ColumnFamily中的行).我期待历史:
我正在考虑以下方法:
将地址簿转换为超级列族并将多个版本的地址簿记录存储在一行(按时间戳)键为超级列.
创建新的超级列族以存储旧记录或更改记录.这种结构如下:
{'地址簿行键':{'时间戳1':{'名字':'新名称','由'修改':'用户ID',},
'time stamp2': {
'first name': 'new name',
'modified by': 'user id',
},
},
Run Code Online (Sandbox Code Playgroud)
'另一个地址簿行键':{'时间戳':{....
将版本存储为新ColumnFamilly中附加的序列化(JSON)对象.将版本集表示为行,将版本表示为列.(使用CouchDB进行简单文档版本控制后建模)
我在mongodb中有一个md5的集合.我想找到所有重复的内容.md5列已编制索引.你知道使用map reduce做任何快速的方法吗?或者我应该迭代所有记录并手动检查重复项?
我目前使用map reduce的方法几乎两次迭代集合(假设重复数量非常少):
res = db.files.mapReduce(
function () {
emit(this.md5, 1);
},
function (key, vals) {
return Array.sum(vals);
}
)
db[res.result].find({value: {$gte:1}}).forEach(
function (obj) {
out.duplicates.insert(obj)
});
Run Code Online (Sandbox Code Playgroud) 您能否分享一下您如何在PostgreSQL中实现数据版本控制?(我已经问过关于Cassandra和MongoDB的类似问题.如果您有任何想法,哪个数据库更好,请分享)
假设我需要在简单的地址簿中对记录进行版本控制.为简单起见,地址簿记录存储在一个表中而没有关系.我期待历史:
我正在考虑以下方法:
创建一个新的对象表来存储记录的历史记录,其中包含地址簿表的模式副本,并将时间戳和外键添加到地址簿表中.
创建一种架构较少的表来存储对通讯录记录的更改.这样的表包括:AddressBookId,TimeStamp,FieldName,Value.这样我只存储记录的更改,我不必保持历史表和地址簿表同步.
创建一个表来存储seralized(JSON)通讯簿记录或更改通讯簿记录.这样的表看起来如下:AddressBookId,TimeStamp,Object(varchar).同样这是架构,所以我不必保持历史表与地址簿表同步.(这是使用CouchDB进行简单文档版本控制后建模的)
我正在研究一种使用rs232(rs232 over USB)连接到PC的嵌入式设备.
我正在考虑开发自己的协议:
<MAGIC><LENGTH><BINARY DATA><CRC>
但我不想重新发明轮子.
请注意:我正在考虑相当受限的设备:4kb的RAM,没有内核,也没有标准的C lib.
你能想到一个标准的方法(也许是开源库)吗?
如果您编写自己的解决方案,是否有任何最佳实践?
更新: 请重新阅读问题.我不应该要求图书馆,而是要求良好做法.
我正在阅读Hadoop:Tom White的权威指南.在第13.6节"HBase与RDMS"中,他说如果你有很多数据,即使是简单的查询,比如获得10个最近的项目,也是非常昂贵的,他们不得不使用python和PL/SQL重写它们.
他给出了以下查询作为示例:
SELECT id, stamp, type FROM streams
WHERE type IN ('type1','type2','type3','type4',...,'typeN')
ORDER BY stamp DESC LIMIT 10 OFFSET 0;
Run Code Online (Sandbox Code Playgroud)
并说:"RDBMS查询计划程序将此查询视为如下:
MERGE (
SELECT id, stamp, type FROM streams
WHERE type = 'type1' ORDER BY stamp DESC,
...,
SELECT id, stamp, type FROM streams
WHERE type = 'typeK' ORDER BY stamp DESC
) ORDER BY stamp DESC LIMIT 10 OFFSET 0;
Run Code Online (Sandbox Code Playgroud)
这里的问题是我们只关注前10个ID,但查询规划器实际上实现了整个合并,然后在最后限制.....实际上我们写了一个执行heapsort的自定义PL/Python脚本....几乎在所有情况下,这都优于本机SQL实现和查询规划器的策略......
预期的穿孔和expermiental结果
我无法想象会导致此类问题的数据集,您必须编写pl/python才能执行此类简单查询.所以我已经玩了一段时间来解决这个问题,并提出了以下观察:
这种查询的性能受O(KlogN)限制.因为它可以翻译成如下内容:
SELECT * FROM (
SELECT id, stamp, type FROM streams
WHERE type = 'type1' …Run Code Online (Sandbox Code Playgroud) 我需要从不同的域服务器部分应用程序.确切地说,我有一个网站的子部分应该从特定于区域的域提供.例如:
我想创建一个路由条目,将具有错误域的请求重定向到正确的域.但我不知道如何从HttpContext访问http头信息.
欢迎任何帮助.
我想使用AMQP加入两个用C#编写的服务和其他用python编写的服务.我期待每秒大量的消息.
我使用sqlite作为临时存储来计算有关中等大数据集的统计信息.我想知道如果我的数据库在32位系统上超过2GB会发生什么.(我目前无法将系统更改为64位)
它是否使用内存映射文件并在文件大小超过可寻址内存时中断?(像mongodb)
我曾尝试使用java.net.URI来操作查询字符串,但我甚至没有完成非常简单的任务,例如从一个URL获取查询字符串并将其放在另一个URL中.
你知道如何使这个代码在下面工作
URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
"http",
"domain",
"/a-path",
sample.getRawQuery(),
sample.getFragment());
Run Code Online (Sandbox Code Playgroud)
调用uri2.toASCIIString()应该返回:http://domain/a-path?param1=x%3D1
但它返回:( http://domain/a-path?param1=x%253D1双重编码)
如果我使用getQuery()而不是getRawQuery(),则查询字符串根本不会被编码,并且url如下所示: http://domain/a-path?param1=x=1