小编Pio*_*pla的帖子

C中函数指针的递归声明

我想声明一个返回指向同一类型函数的指针的函数.

我想用它来实现如下所示的状态机:

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)

c c89

20
推荐指数
1
解决办法
4181
查看次数

在Cassandra中实现数据版本控制的方法

您能否分享一下您如何在Cassandra中实现数据版本控制的想法?

假设我需要在简单的地址簿中对记录进行版本控制.(地址簿记录存储为ColumnFamily中的行).我期待历史:

  • 将很少使用
  • 将一次性使用以"时间机器"的方式呈现它
  • 单个记录的版本不会超过几百个.
  • 历史不会过期.

我正在考虑以下方法:

  • 将地址簿转换为超级列族并将多个版本的地址簿记录存储在一行(按时间戳)键为超级列.

  • 创建新的超级列族以存储旧记录或更改记录.这种结构如下:

    {'地址簿行键':{'时间戳1':{'名字':'新名称','由'修改':'用户ID',},

    'time stamp2': {
            'first name': 'new name',
            'modified by': 'user id',
        },
    },
    
    Run Code Online (Sandbox Code Playgroud)

    '另一个地址簿行键':{'时间戳':{....

  • 将版本存储为新ColumnFamilly中附加的序列化(JSON)对象.将版本集表示为行,将版本表示为列.(使用CouchDB进行简单文档版本控制后建模)

database-versioning cassandra

20
推荐指数
1
解决办法
1万
查看次数

快速查找mongodb中索引列的重复项

我在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)

mapreduce mongodb

19
推荐指数
3
解决办法
3万
查看次数

在PostreSQL中实现数据版本控制的方法

您能否分享一下您如何在PostgreSQL中实现数据版本控制?(我已经问过关于CassandraMongoDB的类似问题.如果您有任何想法,哪个数据库更好,请分享)

假设我需要在简单的地址簿中对记录进行版本控制.为简单起见,地址簿记录存储在一个表中而没有关系.我期待历史:

  • 将很少使用
  • 将一次性使用以"时间机器"的方式呈现它
  • 单个记录的版本不会超过几百个.
  • 历史不会过期.

我正在考虑以下方法:

  • 创建一个新的对象表来存储记录的历史记录,其中包含地址簿表的模式副本,并将时间戳和外键添加到地址簿表中.

  • 创建一种架构较少的表来存储对通讯录记录的更改.这样的表包括:AddressBookId,TimeStamp,FieldName,Value.这样我只存储记录的更改,我不必保持历史表和地址簿表同步.

  • 创建一个表来存储seralized(JSON)通讯簿记录或更改通讯簿记录.这样的表看起来如下:AddressBookId,TimeStamp,Object(varchar).同样这是架构,所以我不必保持历史表与地址簿表同步.(这是使用CouchDB进行简单文档版本控制后建模的)

postgresql database-versioning

13
推荐指数
1
解决办法
6153
查看次数

一种在嵌入式设备上将字节流转换为C89中的数据包流的方法

我正在研究一种使用rs232(rs232 over USB)连接到PC的嵌入式设备.

我正在考虑开发自己的协议:

<MAGIC><LENGTH><BINARY DATA><CRC>

但我不想重新发明轮子.

注意:我正在考虑相当受限的设备:4kb的RAM,没有内核,也没有标准的C lib.

你能想到一个标准的方法(也许是开源库)吗?

如果您编写自己的解决方案,是否有任何最佳实践?

  • 你是否也在包的末尾使用MAGIC字节?
  • 也许最好使用时间间隔而不是分隔符?
  • 如何在流二进制数据中找到包的开头?
  • 也许最好使用文本协议?

更新: 请重新阅读问题.我不应该要求图书馆,而是要求良好做法.

c embedded communication c89

11
推荐指数
1
解决办法
5247
查看次数

RDBMS是否如Hadoop中描述的那样糟糕:权威指南?

我正在阅读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)

postgresql rdbms hbase nosql

11
推荐指数
1
解决办法
680
查看次数

如何从HttpContext(asp.net)获取"Host:"标头

我需要从不同的域服务器部分应用程序.确切地说,我有一个网站的子部分应该从特定于区域的域提供.例如:

  • / fr/*应该来自www.domain.fr
  • / uk/*应该来自www.domain.co.uk等服务器.

我想创建一个路由条目,将具有错误域的请求重定向到正确的域.但我不知道如何从HttpContext访问http头信息.

欢迎任何帮助.

c# asp.net asp.net-mvc

10
推荐指数
3
解决办法
2万
查看次数

AMQP生产准备好了吗?

我想使用AMQP加入两个用C#编写的服务和其他用python编写的服务.我期待每秒大量的消息.

  • 是否有任何AMQP经纪人准备好生产?
  • python和.net绑定是否足够好?

.net python amqp rabbitmq

10
推荐指数
2
解决办法
1213
查看次数

32位系统上SQLite的文件大小限制

我使用sqlite作为临时存储来计算有关中等大数据集的统计信息.我想知道如果我的数据库在32位系统上超过2GB会发生什么.(我目前无法将系统更改为64位)

它是否使用内存映射文件并在文件大小超过可寻址内存时中断?(像mongodb)

sqlite

9
推荐指数
1
解决办法
7322
查看次数

如何使用java.net.URI

我曾尝试使用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

java standard-library

9
推荐指数
1
解决办法
1万
查看次数