小编sci*_*lot的帖子

LIMIT 1非常慢,对于特定记录,使用不同的键

我正在诊断一个间歇性的慢查询,并在MySQL中发现了一个奇怪的行为我无法解释.它只针对一个特定情况选择不同的非最佳关键策略,只有在做一个时LIMIT 1.

表(为简洁起见,删除了一些未引用的数据列)

CREATE TABLE `ch_log` (
    `cl_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `cl_unit_id` INT(11) NOT NULL DEFAULT '0',
    `cl_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
    `cl_type` CHAR(1) NOT NULL DEFAULT '',
    `cl_data` TEXT NOT NULL,
    `cl_event` VARCHAR(255) NULL DEFAULT NULL,
    `cl_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `cl_record_status` CHAR(1) NOT NULL DEFAULT 'a',
    PRIMARY KEY (`cl_id`),
    INDEX `cl_type` (`cl_type`),
    INDEX `cl_date` (`cl_date`),
    INDEX `cl_event` (`cl_event`),
    INDEX `cl_unit_id` (`cl_unit_id`),
    INDEX `log_type_unit_id` (`cl_unit_id`, `cl_type`),
    INDEX `unique_user` (`cl_user_number`, `cl_unit_id`) …
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization performance innodb

17
推荐指数
1
解决办法
611
查看次数

在Gensim中按ID检索文档的字符串版本

我正在使用Gensim进行一些主题建模,我已经到了使用LSI和tf-idf模型进行相似性查询的地步.我找回了一组ID和相似之处,例如.(299501, 0.64505910873413086).

如何获取与ID相关的文本文档,在本例中为299501?

我查看了语料库,字典,索引和模型的文档,似乎无法找到它.

python gensim

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

如何确定Eloquent关系(或执行传统连接)的范围

我正在尝试构建一组Eloquent模型,它们代表现有的硬件设备数据库(两者都不能更改).我知道如何在SQL中执行此操作,但我正在努力构建一个使用第三个表的模型关系,类似于关系/联结表,但与复合键一对一关系.

有三个实体(简化):

  1. 设备
  2. 会议
  3. device_user

用户可以同时在许多设备中,并具有与这些设备相关联的会话日志.用户确实拥有唯一的ID,但从设备的角度来看,它们只有一个"用户号",它只是短(3个字节),因此不能代表整个用户范围,因此它映射在device_user表中.(它实际上比这更复杂,但出于这个问题的目的,我已经将其剥离了)

设备表:

d_id                PK
[data fields...]
Run Code Online (Sandbox Code Playgroud)

device_user表:

du_uid              User's actual ID
du_device_id        FK to device.d_id
du_number           000-999
[metadata...]
Run Code Online (Sandbox Code Playgroud)

会话表:

s_device_id         device.d_id
s_user_number       000-999 (device_user.du_number)
[data fields...]
Run Code Online (Sandbox Code Playgroud)

场景:我有一个会话,我想查找特定的device_user.d_uid.在SQL中我会做类似的事情:

SELECT session.blah, du_uid
FROM session
INNER JOIN device_user ON du_device_id = s_device_id AND du_number = s_user_number
Run Code Online (Sandbox Code Playgroud)

所以我想这实际上只是一个复合键的关系.

我在Eloquent中尝试的是这样的:

class SessionLogModel {

    public function device(){
        return $this->belongsTo('MyModels\\DeviceModel', 's_device_id', 'd_id');
    }

    public function user(){
        return $this->belongsTo('MyModels\\DeviceUserModel', 's_user_number', 'du_number')

        // A) I tried:
        ->withDevice($this->s_device_id);

        // or B) I tried:
        ->withDevice($this->device());

    } …
Run Code Online (Sandbox Code Playgroud)

php relational-database eloquent

8
推荐指数
1
解决办法
450
查看次数

alpine`apk`是否有ubuntu`apt``-- no-install-recommended`等价物

我正试图制作我可以逃脱的绝对最小的Docker图像,所以我已经从ubuntu作为我的基地切换到高山.

因为apt,我曾经用来--no-install-recommends最小化与我想要的软件包一起安装的"依赖项".是否有一个我需要传递的等效标志,apk或者这是这个瘦身操作系统的默认行为?

packages apk docker alpine-linux

8
推荐指数
1
解决办法
3606
查看次数

Vue-CLI 版本号 - 它是否存在以及如何在 Vue 应用程序本身中使用它?

我有一个 Vue 应用程序正在使用 Vue CLI 构建用于生产部署。

我想在应用程序中包含一个典型的递增版本号,以便我和测试人员可以确定我们正在测试正确的确切版本。我想以至少两种方式在应用程序中使用它 a) 将它显示给测试人员,b) 将它包含在错误跟踪 API 调用中,例如 Sentry.io。

目前我必须查看 app.XXXX.js 上的哈希值并进行比较。虽然这确实唯一标识了构建,但它不是顺序的,对于 CSS/JS/供应商等是不同的,并且很难在代码库中使用。

我很高兴编写一个构建包装器脚本,该脚本管理数字并将其注入到构建中(如果需要的话)。

我目前使用的命令是例如

npx vue-cli-service build --mode staging
Run Code Online (Sandbox Code Playgroud)

versioning testing build vue.js vue-cli

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

Google Cloud Storage 不一致,在可恢复上传完成后 500 毫秒之前返回 404

我正在使用云存储制作一个文件上传器,该文件上传器的行为不一致,这似乎与文档相反。

当您将对象上传到 Cloud Storage 并收到成功响应时,该对象可立即从 Google 提供服务的任何位置进行下载和元数据操作。无论您创建新对象还是替换现有对象,都是如此。由于上传是高度一致的,因此您永远不会收到 404 Not Found 响应或写入后读取或元数据更新后读取操作的陈旧数据。https://cloud.google.com/storage/docs/consistency#strongly_consistency_operations

...但是如果我上传后立即阅读,我会收到 404。

流程如下:

  1. 我的后端 NodeJS API 启动可恢复上传,创建存储桶的会话 URI
  2. 然后用户通过 PUT 从浏览器将文件直接上传到 GCS 会话 URI
  3. 前端发布了对我的 API 的更新,表示上传已完成。
  4. 然后我的 API 尝试下载相同的文件作为流并摄取它

我一切正常,但后来发现当上传新文件时(即存储桶中尚不存在),上传完成(步骤 2)和读取成功(步骤 4)之间需要 500 毫秒的延迟。如果我立即执行,我会得到 404。

文档指出,通常上传可以立即使用,除非有一些缓存。

重要提示:公开可读的缓存对象可能不会表现出强一致性。有关详细信息,请参阅缓存控制和一致性

我正在使用XMLHttpRequest将文件上传到 GCS 并使用该load事件来检测已完成的上传。根据我的阅读,这应该意味着已收到 200 响应,因此该文件已就位。尽管调试加载事件表明它只是另一个 100% 的“进度”事件。

我尝试过的

解决方法是setTimeout(done, 500)在第 3 步调用我的 API 之前,将 a 添加到加载事件处理程序中的最终回调中。

我已经对此进行了数十次测试,它是可靠的,可重复的,其中 0 - 400 毫秒失败,大约 500 毫秒以上“修复”它总是。

我尝试按照建议将缓存控制标头添加到原始 POST 中,这将上传会话设置为没有缓存 - …

javascript file-upload consistency node.js google-cloud-storage

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

如何将测试用例数组发送到PHPUnit willReturnOnConsecutiveCalls

我正在尝试将预先计算的测试用例数组发送到模拟中,以便在连续调用中返回-与map函数类似。但是,它需要一个参数列表,而不是数组。

我的数组已经由夹具生成器生成,并且长度可能可变。

我想做的就是这样,但是当然这会使它在第一次调用时返回整个数组。

// In a test case:
$processorMock
    ->method('process')
    ->willReturnOnConsecutiveCalls(
        $fixtureLoader->getProcessorScenarios() // how to explode this?
    );

// class FixtureLoader pseudocode:
function getProcessorScenarios(){
    return [ 
       [ $param1, $param2, $param3 ], // case 1
       [ $param1, $param2, $param3 ], // case 2
       ...
       [ $param1, $param2, $param3 ], // case N
    ];
}
Run Code Online (Sandbox Code Playgroud)

我想使用list()或其他语言中类似“ ...”之类的var-args爆炸性语言构造,从夹具加载器中解构返回的数组,但找不到任何有效的本机。

我确实有种怪异的感觉,我将以最初的回答问答方式发布。我想知道这是否是最好的方法。

php arrays phpunit unit-testing

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

名为插槽“激活器”的Vue JS Vuetify菜单未绑定到模板,而是转到“默认”

我似乎无法让 Vuetify v-menu 的示例代码在我的 PWA 应用程序中工作,但它在 Fiddle 中正常工作(例如https://jsfiddle.net/tjw13yz4/27/

问题是:激活器插槽内容没有出现。

通过调试 vuetify 源代码,我发现激活器模板出现在“默认”槽(所有隐藏内容所在的位置)下,而不是在命名的激活器槽(可见按钮/点击区域应该所在的位置)中。

我已将我的应用程序简化为基本框架(最初我有动态组件、表单、API 等),因此我将其简化为顶级 v-app 元素内的一个 v-menu,并删除了所有路由器,商店和其他插件。这很简单,我可以得到它,但仍然不起作用。小提琴和我的本地应用程序之间唯一的区别是构建系统。

我还尝试更改/删除插槽道具和on通过按钮的绑定,这确实修改了命名插槽在 Vuetify(或 Vue)中的内部表示方式。然而,无论有没有道具的版本都不能正确绑定命名槽。

我还更新并重建了 npm(在另一个 SO 中建议),所以我使用的是最新的 Vue 2.6.10 和 Vuetify 1.5.14。

我还确保我正在包装<v-app></v-app>(但在我安装 Vuetify 插件时发生了这种情况),如其他 SO 中所述。

我还阅读了这篇 SO,我发现它在调试中很有用。

我试过slot=activator直接放在 HTML 标签上,而不是使用模板。

而且我可能尝试了很多其他的东西,(最初我只是遇到了一个on没有定义 for v-on的问题,但这是由于这个潜在的问题)。

这些是我的简化文件 - 这一切都非常标准:

App.vue(有/没有用于事件绑定的道具)

<template>
  <v-app>

    <v-menu offset-y>
      <template v-slot:activator>
        <v-btn color="primary" dark>Dropdown</v-btn>
      </template>

      <p>The menu content</p>
    </v-menu>

    <v-menu offset-y>
      <template v-slot:activator="{ on }">
        <v-btn color="primary" …
Run Code Online (Sandbox Code Playgroud)

javascript node.js vue.js babeljs vuetify.js

3
推荐指数
1
解决办法
4240
查看次数

左移&lt;&lt;如何在不同的功能中给出不同的结果?

我一直在调试 C++ 库中的一个问题,发现文字 0设置为 0仅在库内部的变量之间存在奇怪的差异。如果我将代码复制到我自己的代码中,它会按预期工作。

库代码正在1向下移动一个长整数以一次屏蔽一位。发送某个代码(REPEAT 键)时,您会发送一种虚拟数据包,并且“没有位”,因此它传输标头而不传输数据。我假设如果没有要发送的位,for 循环将跳过循环。

我已经简化了它以分解分配,并添加了以下调试。我只是重复这两个步骤nbits0我添加的文字。

void  IRsend::sendNEC (unsigned long data,  int nbits){

    Serial.println(data, HEX);
    Serial.print(" nbits = ");
    Serial.println( nbits);
    if(nbits == 0) Serial.println("nbits == 0"); else Serial.println("nbits != 0 "); 
    Serial.print(" 0 - 1 = ");
    Serial.println(0 - 1);
    Serial.print(" nbits - 1 = ");
    Serial.println(nbits - 1);
    Serial.print(" (1UL << (0 - 1) = ");
    Serial.println(1UL << (0 - 1));
    Serial.print(" …
Run Code Online (Sandbox Code Playgroud)

c++ bit-shift bitwise-operators

2
推荐指数
1
解决办法
139
查看次数