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想法的优点:
缺点:
一些跟进问题与此相关:
我应该在末尾使用多于或少于6个随机数字?它会对索引性能产生影响吗?
这些方法之一是任何"randomer"吗?:让PHP生成6位数并将它们连接在一起-VS-让PHP生成1 - 999999范围内的数字,然后zerofilling以确保6位数.
谢谢你的任何提示.抱歉,文字墙.
如果我想在 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)
...但他们对此不起作用。
我正在建立一个论坛,非常像 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
在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{} 是无效代码的部分,我正在寻找一种更少冗余的方法,以及可选的额外严格性,以防止任何其他属性添加到不同类型的对象.
我知道我可能在这里错过了一些非常基础的东西,我正在尝试使用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) 我刚刚开始在使用 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中生成),我猜这并不是我应该做的事情?
是否有内置函数或其他方法来限制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)
如果没有,我会写一个函数.只是希望可能有内置的东西,因为性能对于这个项目非常重要.谢谢!
我希望能够npx tsc在我的主机 + 来宾操作系统上运行我的项目。但是来宾使用的是不同(旧)版本的tsc- 我不确定它来自哪里。
我的设置:
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在来宾中运行以编译我的代码,因为它不支持我的一些较新的 …
我正在使用 TypeScript 开发一个团队项目,并且我知道实际上存在 100 个 TypeScript 错误(我在 PhpStorm 的 TypeScript 工具窗口中看到它们)。
我试图用它tsc来获取错误计数,但它只报告 46...
tsc
...
Found 46 errors.
Run Code Online (Sandbox Code Playgroud)
它们都来自node_modules,尽管我们的tsconfig.json文件中排除了它们。
不知道为什么它要扫描node_modules,或者为什么它说整个项目总共只有 46 个错误。
sql ×3
typescript ×3
database ×2
mysql ×2
node.js ×2
tsc ×2
async-await ×1
asynchronous ×1
command-line ×1
interface ×1
knex.js ×1
npm ×1
npx ×1
parent-child ×1
performance ×1
postgresql ×1
promise ×1
recursion ×1
type-hinting ×1
type-safety ×1
types ×1
vue-apollo ×1
vue.js ×1
vuejs2 ×1