小编LaV*_*che的帖子

MySQL PRIMARY KEYs:UUID/GUID vs BIGINT(时间戳+随机)

tl; dr:如果我不想处理UUID,将{unixtimestamp} {randomdigits}(例如1308022796123456)的行ID分配为BIGINT是一个好主意吗?

只是想知道是否有人对跨多个服务器分配给数据库记录的ID/PRIMARY KEY的任何性能或其他技术考虑/限制有所了解.

我的PHP + MySQL应用程序在多个服务器上运行,数据需要能够合并.所以我已经超越了识别行的标准顺序/ auto_increment整数方法.

我对解决方案的研究使我了解了使用UUID/GUID的概念.但是,需要更改我的代码以处理在MySQL中将UUID字符串转换为二进制值似乎有点痛苦/工作.出于存储和性能原因,我不想将UUID存储为VARCHAR.

存储在二进制列中的UUID的另一个可能的烦恼是,当查看PhpMyAdmin中的数据时,行ID并不明显 - 尽管我可能错了 - 但直接数字看起来总体上要简单得多,并且在任何情况下都是通用的一种不需要转换的数据库系统.

作为一个中间点,我提出了将ID列设置为BIGINT,并使用当前unix时间戳后跟6个随机数字来分配ID的想法.所以我可以说我的随机数是123456,我今天生成的ID将会出现:1308022796123456

对于我在同一秒内创建的行冲突的可能性为1000万.我没有快速做任何类型的大规模行创建.

我用随机生成的UUID读到的一个问题是它们对索引不好,因为值不是连续的(它们遍布整个地方).MySQL中的UUID()函数通过从当前时间戳生成UUID的第一部分来解决此问题.因此,我复制了在我的BIGINT开头使用unix时间戳的想法.我的索引会慢吗?

我的BIGINT想法的优点:

  • 给我UUID的多服务器/合并优势
  • 需要对我的应用程序代码进行很少的更改(所有内容都已编程为处理ID的整数)
  • UUID的一半存储空间(8字节对16字节)

缺点:

  • ??? - 如果您能想到,请告诉我.

一些跟进问题与此相关:

  1. 我应该在末尾使用多于或少于6个随机数字?它会对索引性能产生影响吗?

  2. 这些方法之一是任何"randomer"吗?:让PHP生成6位数并将它们连接在一起-VS-让PHP生成1 - 999999范围内的数字,然后zerofilling以确保6位数.

谢谢你的任何提示.抱歉,文字墙.

mysql sql database performance database-design

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

vscode (code.exe) 命令行参数可通过 SSH 立即打开远程工作区文件夹

如果我想在 C:\ 下的常规本地文件夹中打开工作区,我只需执行以下命令:

code.exe C:\the-local-workspace-folder
Run Code Online (Sandbox Code Playgroud)

是否有用于打开远程 SSH 工作区的等效命令?

我希望能够使用键盘启动器打开它们,而不是需要在 vscode 的内部菜单中以繁琐的方式打开它们。

所以我需要一个常规的系统命令才能做到这一点。

我在这里查看了命令行参数: https: //code.visualstudio.com/docs/editor/command-line - 但根本找不到有关远程工作区的任何信息。

我也尝试过类似的命令:

code.exe username@hostname.example.com:/workspace-folder
code.exe username@hostname.example.com/workspace-folder
Run Code Online (Sandbox Code Playgroud)

...但他们对此不起作用。

command-line visual-studio-code vscode-remote

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

具有递归 CTE 的 Postgres:按受欢迎程度对子项进行排序/排序,同时保留树结构(父项始终高于子项)

我正在建立一个论坛,非常像 Reddit/Slashdot,即

  • 无限回复嵌套级别
  • 热门评论(按赞/投票排序)会上升到顶部(在他们自己的嵌套/深度级别内),但需要保留树结构(父级始终显示在子级正上方)

这是一个示例表和数据:

DROP TABLE IF EXISTS "comments";
CREATE TABLE comments (
  id BIGINT PRIMARY KEY,
  parent_id BIGINT,
  body TEXT NOT NULL,
  like_score BIGINT,
  depth BIGINT
);

INSERT INTO comments VALUES (  0, NULL, 'Main top of thread post', 5 , 0 );

INSERT INTO comments VALUES (  1, 0, 'comment A', 5 , 1 );
INSERT INTO comments VALUES (  2, 1,    'comment A.A', 3, 2 );
INSERT INTO comments VALUES (  3, 1,    'comment A.B', 1, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursion parent-child common-table-expression

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

Typescript:声明对象上的所有属性必须属于同一类型

在Typescript中,您可以声明数组中的所有元素都是这样的类型:

const theArray: MyInterface[]
Run Code Online (Sandbox Code Playgroud)

是否有类似的东西可以声明所有对象的属性值必须是同一类型?(没有指定每个属性名称)

例如,我目前正在这样做:

interface MyInterface {
    name:string;
}

const allTheThingsCurrently = {
    first: <MyInterface>{name: 'first thing name' },
    second: <MyInterface>{name: 'second thing name' },
    third: <MyInterface>{name: 'third thing name' },
    //...
};
Run Code Online (Sandbox Code Playgroud)

...注意我必须<MyInterface>为每个属性指定.这有什么捷径吗?即我想象这样的事情......

const allTheThingsWanted:MyInterface{} = {
    first: {name: 'first thing name' },
    second: {name: 'second thing name' },
    third: {name: 'third thing name' },
    //...
};
Run Code Online (Sandbox Code Playgroud)

MyInterface{} 是无效代码的部分,我正在寻找一种更少冗余的方法,以及可选的额外严格性,以防止任何其他属性添加到不同类型的对象.

types interface type-hinting type-safety typescript

6
推荐指数
3
解决办法
3835
查看次数

vue-apollo:GraphQL查询仅在使用&lt;ApolloQuery&gt;标记时运行。从不在脚本代码中工作。this。$ apollo.queries为空

我知道我可能在这里错过了一些非常基础的东西,我正在尝试使用vue-apollo运行graphql查询...如果我使用标签,那么效果很好

如果我尝试从代码内部运行查询,例如docs中的基本示例(下面的链接),则什么都不会发生。服务器从不接收任何请求,并且此。$ apollo.queries为空。)

文档中的基本示例:

我已经在“ apollo”属性/对象中定义了查询...页面加载后如何实际执行查询?请注意,我使用的是打字稿,这就是为什么使用“ get apollo()”方法的原因。

这是我的代码...

<script lang="ts">
  import { Component, Vue } from 'vue-property-decorator'

  export default class List extends Vue {

    myQueryName='my default value';

    get apollo() {
      return {
        myQueryName: {
          query: require('../graphql/listMeta.graphql'),
          // prefetch: true <-- tried with and without this
        }
      }
    }

  }
</script>

<template>
  <div>

    <!-- THIS DOESN"T WORK ... -->
    queries are: {{this.$apollo.queries}} <!-- THIS JUST SHOWS AN EMPTY OBJECT: {} -->
    <hr>
    myQueryName value is: {{myQueryName}} <!-- …
Run Code Online (Sandbox Code Playgroud)

vue.js vuejs2 apollo-client vue-apollo

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

Knex.js - 节点进程永远不会退出,如何优雅地关闭它 - 但只有当所有查询都得到解决时?

我刚刚开始在使用 Node.js 的命令行脚本项目中使用 Knex.js。

我已经让它工作了,并且可以运行查询等。但是当我的脚本完成时(并且所有待处理的承诺都已解决),Node 进程会永远挂起,直到我用ctrl+c.

我是否需要做一些事情来告诉 Knex 断开与数据库的连接 - 但只有在所有查询完成后?

我尝试将其作为脚本的结尾:

knex.destroy();
Run Code Online (Sandbox Code Playgroud)

...但这只会立即终止连接,即如果有一个尚未完成的查询的待处理承诺,它就会立即被终止,我得到:

UnhandledPromiseRejectionWarning: Error: aborted
...
(node:18284) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). 
Run Code Online (Sandbox Code Playgroud)

...我明白错误是什么,它在我的一个查询完成之前就终止了连接。我只是不知道如何解决当没有什么可做的时候把事情完成的总体问题。

我已经使用 Node 和 Promise/async/await 几年了,但我似乎经常遇到这些问题,除非我专门编写代码来关闭数据库连接和类似的事情,否则进程最终会冻结。 ..它通常做得太早了。我已经阅读了许多有关异步/承诺的资源,但我从未能够找到与节点进程关闭/退出相关的任何有用信息 - 但只有在没有未解决的承诺的情况下。如果有人知道与此退出/永远冻结相关的任何有用资源,请告诉我 - 这似乎是我经常遇到的问题,所以我可能会误解某些内容。

更一般地说,有没有什么方法可以判断是否有任何 Node Promise 处于待处理状态(项目中全局的任何位置,而无需为每个 Promise 手动编写跟踪代码)?我也想弄清楚这个问题很长时间,但从未找到答案。如果我能找到这一点,那么我可以手动运行当时需要的任何关闭函数,但似乎没有办法做到这一点?

这是一个很大的项目,因此不可能将await每个函数和查询放在前面,或者编写包装代码来完成繁琐的事情,例如手动计算每个地方创建/解决的承诺(无论如何,考虑到承诺大多是不可能的)在node_module中生成),我猜这并不是我应该做的事情?

asynchronous node.js promise async-await knex.js

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

在MySQL中将数字限制为最大值

是否有内置函数或其他方法来限制MySQL中的数字值?

例如,假设我有一个包含以下行的表:

score
=====
5
10
20
50
3
15
Run Code Online (Sandbox Code Playgroud)

我正在寻找某种类型的查询......

SELECT NUMBER_LIMITER(score, 10) FROM ScoresTable
Run Code Online (Sandbox Code Playgroud)

......会返回以下结果......

score
=====
5
10
10
10
3
10
Run Code Online (Sandbox Code Playgroud)

如果没有,我会写一个函数.只是希望可能有内置的东西,因为性能对于这个项目非常重要.谢谢!

mysql sql database

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

“npx tsc --version”报告虚拟机内不同的TypeScript版本

我希望能够npx tsc在我的主机 + 来宾操作系统上运行我的项目。但是来宾使用的是不同(旧)版本的tsc- 我不确定它来自哪里。

我的设置:

  • 主机操作系统:Windows 10
  • 来宾操作系统:Debian 9
  • 我正在使用 VirtualBox,并且来宾正在使用 VirtualBox 的“共享文件夹”功能挂载主机的文件 - 因此它没有项目文件的单独副本 - 我的项目始终通过共享文件夹访问。
  • 我没有在主机或来宾操作系统上全局安装 Typescript(npm -g)(为了确认这一点,npm -g ls typescript在主机+来宾上运行都显示“空”,而单独运行“tsc”不起作用,正如预期的那样)。

我有一个使用 NPM 安装到项目中的 TypeScript 3.3.3333 项目。

在 Windows 主机操作系统上,当我cd到项目文件夹并运行时:

  • npm ls typescript我看到输出:(typescript@3.3.3333如预期)
  • npx tsc --version我看到输出:(Version 3.3.3333如预期)

在 Linux 来宾操作系统中,当我cd进入项目文件夹并运行时:

  • npm ls typescript我看到输出:(typescript@3.3.3333如预期)
  • npx tsc --version我看到输出:message TS6029: Version 1.5.3意外!

所以我无法npx tsc在来宾中运行以编译我的代码,因为它不支持我的一些较新的 …

node.js npm typescript tsc npx

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

如何获取整个项目的 TypeScript 错误总数?

我正在使用 TypeScript 开发一个团队项目,并且我知道实际上存在 100 个 TypeScript 错误(我在 PhpStorm 的 TypeScript 工具窗口中看到它们)。

我试图用它tsc来获取错误计数,但它只报告 46...

tsc

...

Found 46 errors.
Run Code Online (Sandbox Code Playgroud)

它们都来自node_modules,尽管我们的tsconfig.json文件中排除了它们。

不知道为什么它要扫描node_modules,或者为什么它说整个项目总共只有 46 个错误。

typescript tsc

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