小编Nee*_*asu的帖子

git commit你有一些可疑的补丁行

git commit 给我以下信息

*
* You have some suspicious patch lines:
*
* In projects/bong/traid/apps/controller/project.php
* trailing whitespace (line 220)
projects/bong/traid/apps/controller/project.php:220:        
* trailing whitespace (line 223)
Run Code Online (Sandbox Code Playgroud)

那是什么意思 ?

git

7
推荐指数
2
解决办法
3368
查看次数

键值存储中的反向索引和数据建模

我是商店的新手key-value。我的目标是使用嵌入式键值存储来保持持久数据模型。如果使用传统的 RDBMS 设计,数据模型将包含很少的相关表。我正在查看一篇关于为键值存储建模表的中等文章。尽管本文使用 Level DB 和 Java,但我计划在我的工作中使用 Level DBRocksDBFASTERC++。

它使用一种方案,其中每行的每个属性都使用一个键,如下例所示。

$table_name:$primary_key_value:$attribute_name = $value
Run Code Online (Sandbox Code Playgroud)

当用户代码确切地知道要获取哪个键时,上面的内容对于点查找来说是很好的。但也有一些场景,比如搜索具有相同电子邮件地址的用户,或者搜索超过一定年龄的用户,或者搜索某一特定性别的用户。在搜索场景中,文章对所有键执行线性扫描。在每次迭代中,它都会检查键的模式,并在找到具有匹配模式的键后应用业务逻辑(检查匹配的值)。

看来,这种类型的搜索效率很低,在最坏的情况下需要遍历整个商店。为了解决这个问题,需要一个反向查找表。我的问题是

如何建模反向查找表?这是某种轮子的重新发明吗?有什么替代方法吗?

很容易想到的一个解决方案是separate ?为每个可索引属性建立一个存储,如下所示。

$table_name:$attribute_name:$value_1 = $primary_key_value 
Run Code Online (Sandbox Code Playgroud)

采用这种方法,迫在眉睫的问题是

如何处理这个反向查找表中的冲突?因为多个$primary_keys 可能与同一个值相关联。

作为直接的解决方案,可以不存储单个值,而是array存储多个主键,如下所示。

$table_name:$attribute_name:$value_1 = [$primary_key_value_1, ... , $primary_key_value_N]
Run Code Online (Sandbox Code Playgroud)

但是这种类型的建模需要用户代码从字符串解析数组,并在多次操作后再次将其序列化为字符串(假设底层键值存储不知道数组值)。

将多个键存储为数组值是否有效?或者存在一些供应商提供的有效方法?

假设类似字符串化的数组设计有效,每个可索引属性都必须有这样的索引。因此,这提供了对索引什么和不索引什么的细粒度控制。想到的下一个设计决策是这些索引将存储在哪里?

索引应该存储在单独的存储/文件中吗?或者在实际数据所属的同一存储/文件中?每个房产是否应该有不同的商店?

对于这个问题,我没有任何线索,因为这两种方法都需要或多或少相同数量的 I/O。然而,如果数据文件较大,则磁盘上的内容较多,内存上的内容较少(因此 I/O 较多),而对于多个文件,内存上的内容较多,因此页面错误较少。根据特定键值存储的架构,这种假设可能是完全错误的。同时,文件太多会成为管理复杂文件结构的问题。此外,维护索引需要插入、更新和删除操作的事务。拥有多个文件会导致多个树中的单个更新,而拥有单个文件会导致单个树中的多个更新。

交易是否更具体地支持涉及多个存储/文件的交易?

不仅是索引,还有表的一些元信息也需要与表数据一起保存。要生成新的主键(自动递增),需要先了解最后生成的行号或最后一个主键,因为类似 a 的东西COUNT(*)不起作用。另外,由于未对所有键建立索引,因此该meta信息可包括对哪些属性建立索引以及对哪些属性未建立索引。

如何存储每个表的元信息?

同样的一组问题也出现在元表中。例如元应该是一个单独的存储/文件吗?此外,我们注意到并非所有属性都被索引,我们甚至可能决定将每一行作为 JSON 编码值存储在数据存储中,并将其与索引存储一起保存。底层键值存储供应商会将该 JSON 视为字符串值,如下所示。

$table_name:data:$primary_key_value = {$attr_1_name: $attr_1_value, ..., $attr_N_name: $attr_N_value}
...
$table_name:index:$attribute_name = [$primary1, ..., $primaryN] …
Run Code Online (Sandbox Code Playgroud)

database data-modeling key-value-store leveldb rocksdb

7
推荐指数
1
解决办法
1724
查看次数

substr md5碰撞

我需要一个4个字符的哈希.目前我正在使用md5()哈希的前4个字符.我正在散列一个长度不超过80个字符的字符串.这会导致碰撞吗?或者,碰撞的几率是多少,假设我的哈希值小于65,536(16 4)个不同的元素?

hash md5 substr hash-collision

6
推荐指数
2
解决办法
3940
查看次数

VS2010编译器定义

在gcc我正在写,friend class FriendMaker<T>::Type但Visual Studio想要friend FriendMaker<T>::Type.所以我认为是时候去编译特定了.

那么我需要ifdefVisual Studio什么?我目前正在使用2010年,但我可能会改用2012年.

c++ conditional-compilation visual-studio

6
推荐指数
1
解决办法
8698
查看次数

模板参数重新声明

这就是我想要实现的目标.leaf组件将继承Component<ParentT>,其他组件将继承Component<ParentT, ChildT>

template <typename T>
class Component{
  protected:
    typedef Component<T> ParentComponentT;
  ...
};

template <typename ParentT, typename ChildT>
class Component: public Component<ParentT>{
  protected:
    typedef std::vector<ChildT*> CollectionT;
  ...
};
Run Code Online (Sandbox Code Playgroud)

但问题是模板参数被重新声明.而且我不能将第二个移到第一个之上,因为第二个继承了第一个.

错误:使用2个模板参数重新声明
注意:上一个声明'模板类Component'使用了1个模板参数

c++ templates

6
推荐指数
1
解决办法
5097
查看次数

在文件中间覆盖

问题是我在文件中间使用fseekNext存在一些长度字节m,我想用长度字节替换n.simple write会保留m-n字节.如果m > n并且如果我不愿意改变的m < n某些字节(n-m)将被覆盖.

我只想startPos to endPos用可变长度字节替换已知的字节流.什么是最佳解决方案.

- 编辑 - 虽然可以通过备份来完成.有没有直接解决方案?这太乱了?和一种糟糕的编码.

o = fopen(original, 'r')
b = fopen(backup, 'w')
while(fpos(o) <= startPos){
    buffer += fgetc(o)
}
fwrite(b, buffer)
fwrite(b, replaceMentBytes)
buffer = ""
fseek(o, endPos)
while(!feof(o)){
    buffer += fgetc(o)
}
fwrite(b, buffer)
Run Code Online (Sandbox Code Playgroud)

//现在将备份复制到原始版本

php c c++ file-io file

5
推荐指数
1
解决办法
483
查看次数

Ubuntu上的Java安装问题

试图在我的新Ubuntu系统上安装Java(JDK 6)并获得一些奇怪的错误.这是我第一次使用任何类型的Linux,所以我确定这是一个用户问题(权限或其他).

我直接从Oracle的站点下载了BIN文件(64位Linux的Java SE 6u23).这默认为下载到/ home/myUserName/Downloads.

从那里我将文件移动到/ opt/java,这是我创建的目录,因为(作为Linux新手)有意义成为Java应该去的目录.

然后我按照我在网上找到的运行BIN的指令运行以下2个命令:

chmod +x jdk-6u23-linux-x64.bin
sudo ./jdk-6u23-linux-x64.bin
Run Code Online (Sandbox Code Playgroud)

现在,在我的/ opt/java目录中,我看到BIN文件和jdk1.6.0_23目录在检查时似乎完好无损.

但是,当我打开一个新终端并运行java -version时,我得到:

程序'java'可以在以下包中找到:
- gcj-4.4-jre-headless
- gcj-4.5-jre-headless
- openjdk-6-jre-headless
试试:sudo apt-get install

这里发生了什么?!?

(1)尝试使用/ opt/java我的Java目录是错误的吗?
(2)我运行了错误的命令吗?
(3)Java 1.6.0_23是否安装在我的机器上?
(4)那些gcj-xxx无头目标是什么?!?!

感谢您的任何意见!

java linux ubuntu

5
推荐指数
2
解决办法
7672
查看次数

当窗口小部件不可见时,QWidget :: mapToGlobal()

QWidget::mapToGlobal窗口小部件不可见时可以工作?我在手册上找不到任何东西.如果不能为什么?

qt qwidget

5
推荐指数
1
解决办法
4201
查看次数

不对称HMAC

验证HMAC生成的哈希需要验证者知道密钥.所以它的对称性.除了SSL之外,什么是similer非对称解决方案?因为我希望签名像md5哈希一样小.并且生成和验证程序要轻松.我正在通过Rabin的Signature算法但是找不到任何实现或伪代码.

hash ssl digital-signature hmac

5
推荐指数
1
解决办法
2461
查看次数

多模型QML地图视图

我有一个基于C++方面的模型AbstractListModel.该模型通过一个角色显示在一个角色中的一组位置MapView.以下是我的代码的最小版本.markerModel: MarkerModel在C++方面定义.

Map{
    MapItemView {
        model: markerModel
        delegate: markerDelegate
    }

    Component {
        id: markerDelegate

        MapQuickItem{
            anchorPoint: Qt.point(2.5, 2.5)
            coordinate: QtPositioning.coordinate(position.y, position.x)
            zoomLevel: 0
            sourceItem: Rectangle{
                ...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代表实际上为模型中的每个位置绘制点.现在我想拥有多个这样的模型.

  1. 我可以使用AbstractTableModelC++而不是AbstractListModel视图将遍历其列并调用markerDelegate每列.或者对行做同样的事情.
  2. 将多个模型动态地暴露给使用单个委托在单个视图上呈现的QML markerDelegate

其中哪一个是标准做法?还是可行的?如何实现这些中的任何一个?

qt model qml

5
推荐指数
0
解决办法
367
查看次数