小编Seb*_*ino的帖子

密钥的嵌套字典或元组?

假设有这样的结构:

{'key1' : { 'key2' : { .... { 'keyn' : 'value' } ... } } }
Run Code Online (Sandbox Code Playgroud)

使用python,我试图确定两种不同方法的优点/缺点:

{'key1' : { 'key2' : { .... { 'keyn' : 'value' } ... } } } # A. nested dictionary
{('key1', 'key2', ...., 'keyn') : 'value'} # B. a dictionary with a tuple used like key
Run Code Online (Sandbox Code Playgroud)

然后我有兴趣知道,最好的(A或B)是什么:

  • 记忆占领
  • 插入的复杂性(考虑避免碰撞的算法......等)
  • 寻找的复杂性

python optimization dictionary

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

oracle提高了查询性能

我是oracle的新手,我不得不反对这个问题.

我有一张桌子,里面有大约520万行.我必须获取所有行并在NoSQL数据库中导入它们(非规范化).

该表有两个整数字段C_ID和A_ID以及3个索引,一个在C_ID上,一个在A_ID上,一个在两个字段上.

我一开始就尝试过这种方式:

SELECT C_ID, A_ID FROM M_TABLE;
Run Code Online (Sandbox Code Playgroud)

这从来没有给我任何合理时间的结果(我没有可能测量时间,因为它似乎永远不会完成).

我用这种方式更改了查询:

SELECT /*+ ALL_ROWS */ C_ID, A_ID FROM (SELECT
    rownum rn, C_ID, A_ID
FROM
    M_TABLE WHERE rownum < ((:1 * :2 ) +1 )) WHERE rn >= (((:1 -1) * :2 ) +1 );
Run Code Online (Sandbox Code Playgroud)

我使用3个线程并行运行此查询,并使用大小为1000的页面进行分页.

我试着介绍三种优化:

1)我在表格上创建了​​统计数据:

ANALYZE TABLE TABLE_M ESTIMATE STATISTICS SAMPLE 5 PERCENT;
Run Code Online (Sandbox Code Playgroud)

2)我在8个分区中对表进行了分区.

3)我用并行选项创建了表.

现在我能够每秒获取10000行,因此整个过程大约需要15个小时才能完成(数据库运行在4核,8 GB机器上).

问题是我需要在最多5个小时内完成所有操作.

我没有想法,因此,在我要求新机器之前,你知道如何在这种情况下提高性能.

sql oracle performance select

8
推荐指数
2
解决办法
5725
查看次数

提高协议缓冲区的性能

我正在编写一个应用程序,需要从单个文件中快速反序列化数百万条消息.

应用程序的作用主要是从文件中获取一条消息,做一些工作然后丢弃消息.每条消息由~100个字段组成(并非所有消息都被解析,但我需要它们,因为应用程序的用户可以决定他想要处理哪些字段).

在这一刻,应用程序包含一个循环,在每次迭代中只使用一个readDelimitedFrom()调用执行.

有没有办法优化问题,以更好地适应这种情况(拆分多个文件等...).另外,在这一刻由于消息的数量和每条消息的维度,我需要gzip文件(并且它在减小大小方面相当有效,因为字段的值非常重复) - 这虽然减少了性能.

java optimization protocol-buffers

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

C++初始化列表

我必须填写std::vector类型的元素struct MHD_OptionItem.这个结构有这个实现:

struct MHD_OptionItem
{
    enum MHD_OPTION option;
    intptr_t value;
    void *ptr_value;
 };
Run Code Online (Sandbox Code Playgroud)

我试过这种方式:

 vector<struct MHD_OptionItem> iov;
 if(...)
     iov.push_back({ MHD_OPTION_NOTIFY_COMPLETED, requestCompleted, NULL });
 if(...)
     iov.push_back({ MHD_OPTION_CONNECTION_TIMEOUT, connectionTimeout });
 [....]
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,g ++编译器对我说:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

我知道我可以初始化一个临时结构,然后将它传递给向量,但这种方法在我看来效率低下而且不那么优雅.

我无法更改插入构造函数的结构,因为这不是我的代码,而是包含库.

有一种优雅的方法可以在不使用c ++ 0x语法的情况下完成此操作吗?

c++ syntax struct

4
推荐指数
1
解决办法
1290
查看次数