我多年来一直在研究Coldfusion/MS SQL,这是我见过的最奇怪的问题之一.问题本身已经解决,但我真的不明白发生了什么; 这个问题试图清楚地了解可能的原因.
问题
在稳定的生产环境中,没有明显的原因,一个查询开始返回大约1,000-1,500毫秒(比通常慢大约10倍).我能够把它分离出来:
<cfquery datasource="#ds#" name="query">
select 1
from eLearning.v_courseCompletion cc
where
cc.memberIncId = <cfqueryparam value="3" cfsqltype="cf_sql_integer"> and
cc.courseId = <cfqueryparam value="25" cfsqltype="cf_sql_integer"> and
cc.currentCourseCompleted = 1
</cfquery>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这种行为在循环中会加剧,即使只有一次迭代,就像在这个例子中一样:
<cfloop from="1" to="1" index="i">
<cfquery datasource="#ds#" name="query">
select 1
from eLearning.v_courseCompletion cc
where
cc.memberIncId = <cfqueryparam value="3" cfsqltype="cf_sql_integer"> and
cc.courseId = <cfqueryparam value="25" cfsqltype="cf_sql_integer"> and
cc.currentCourseCompleted = 1
</cfquery>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
这应该和上面完全一样,对吗?循环应该没有效果,但相反,此测试运行速度慢约10倍,返回7,000-16,000毫秒.这就是问题的检测方法; 如果循环迭代超过5或6次请求将超时,则从循环体调用查询(隐藏在对象方法中).
对我而言,这表明Coldfusion方面存在问题,但重新启动服务,或者确实是机器,什么也没做.
同时,一旦被隔离,我注意到对查询本身进行任何更改都会导致性能恢复到预期的水平,大约150-190毫秒.例如:
select *)cc)<cfqueryparam>用内联值替换这些更改中的任何一个"修复"了问题,但在运行原始查询时,性能问题将会返回.
解决方案
在这一点上,我猜测查询的执行计划已经损坏或者其他东西,做了 …
我正在尝试使用 MongoDB 作为数据库来设置 Keystone。运行后keystone-next,该命令出错并显示以下错误消息:Error: Invalid db configuration. Please specify db.provider as either "sqlite" or "postgresql" at getDBProvider。
他们的文档中没有明确说明db.provider使用 MongoDB 作为数据库时要传递哪些值。
以下是 的内容keystone.ts:
import { config, createSchema } from '@keystone-next/keystone/schema'
import 'dotenv/config'
const databaseUrl =
process.env.DATABASE_URL || 'mongodb://localhost/keystone-project'
const sessionConfig = {
maxAge: 60 * 60 * 24 * 90,
secret: process.env.COOKIE_SECRET || 'keystone-project-secret'
}
export default config({
server: {
cors: {
origin: [process.env.FRONTEND_URL],
credentials: true
}
},
db: {
provider: 'mongoose',
url: …Run Code Online (Sandbox Code Playgroud) 尝试在 Apollo/client 3.4.1 上进行一些身份验证突变,但出现此错误:
ApolloError: this.cache.batch is not a function
at new ApolloError (/var/task/node_modules/@apollo/client/errors/errors.cjs.js:35:28)
at Object.error (/var/task/node_modules/@apollo/client/core/core.cjs.js:1073:90)
at notifySubscription (/var/task/node_modules/zen-observable/lib/Observable.js:140:18)
at onNotify (/var/task/node_modules/zen-observable/lib/Observable.js:179:3)
at SubscriptionObserver.error (/var/task/node_modules/zen-observable/lib/Observable.js:240:7)
at /var/task/node_modules/@apollo/client/utilities/utilities.cjs.js:1015:40
at processTicksAndRejections (internal/process/task_queues.js:95:5) {
graphQLErrors: [],
clientErrors: [],
networkError: TypeError: this.cache.batch is not a function
at QueryManager.refetchQueries (/var/task/node_modules/@apollo/client/core/core.cjs.js:1601:24)
at QueryManager.markMutationResult (/var/task/node_modules/@apollo/client/core/core.cjs.js:1136:18)
at /var/task/node_modules/@apollo/client/core/core.cjs.js:1043:49
at both (/var/task/node_modules/@apollo/client/utilities/utilities.cjs.js:1004:53)
at /var/task/node_modules/@apollo/client/utilities/utilities.cjs.js:997:72
at new Promise (<anonymous>)
at Object.then (/var/task/node_modules/@apollo/client/utilities/utilities.cjs.js:997:24)
at Object.next (/var/task/node_modules/@apollo/client/utilities/utilities.cjs.js:1005:49)
at notifySubscription (/var/task/node_modules/zen-observable/lib/Observable.js:135:18)
at onNotify (/var/task/node_modules/zen-observable/lib/Observable.js:179:3),
extraInfo: undefined
}
Run Code Online (Sandbox Code Playgroud) 我对 GraphQL 和无头 CMS 的概念完全陌生,只从头开始构建了自己的 REST API。
我已经使用 Keystone v6 构建了一个基本 API,可以说我有一个产品架构,如下所示:
export const Item = list({
fields: {
name: text({ validation: { isRequired: true } }),
description: text(),
photos: relationship({
ref: 'ProductImage.listing',
many: true,
}),
category: relationship({
ref: 'Category.listings',
many: false,
}),
dateCreated: timestamp({
defaultValue: { kind: 'now' },
}),
brand: text(),
model: text(),
size: text(),
slug: text(),
},
});
Run Code Online (Sandbox Code Playgroud)
酷,有效......现在说我希望在使用诸如““this-item-name”+“-”+“id””之类的内容创建产品时自动填充 slug,我无法弄清楚/如何这样做或 b/ 甚至从惯例的角度来看。
我的假设是我会使用defaultValue文本字段的属性?或者这是否与突变有关(我还没有很好地理解这个概念)……如果是这样,我无法弄清楚在样板 Keystone 应用程序中我什至会编写突变。
非常感谢任何指点。
我正在构建一个正在部署 keystone.js 服务器的 github 操作事件
\n构建运行时,系统会提示用户回答问题
\n\xe2\x9e\x9c server git:(test-me) npm run build\n\n> keystone-app@1.0.0 build\n> keystone build\n\nYour Prisma and GraphQL schemas are not up to date\n\xe2\x9c\x94 Would you like to update your Prisma and GraphQL schemas? \xe2\x80\xa6 no\nRun Code Online (Sandbox Code Playgroud)\n我的问题是如何配置工作流程,以便在运行时它会回答“是”?
\n谢谢!
\nkeystonejs ×3
graphql ×2
coldfusion ×1
coldfusion-9 ×1
keystonejs6 ×1
mongodb ×1
typescript ×1